Project Euler 503(3)

http://projecteuler.net/index.php?section=problems&id=503

いろいろ工夫することによって高速化を図った。F(1012)まで計算したら、O(N1/2)っぽくなった。普通の解法ならO(N)である。

F(10^6)  :  0.031sec
F(10^7)  :  0.090sec
F(10^8)  :  0.146sec
F(10^9)  :  0.296sec
F(10^10) :  1.893sec
F(10^11) :  4.472sec
F(10^12) : 12.769sec

また、計算量を減らすことにより精度が上がった。F(106)で誤差4e-14程度、F(109)で5e-12程度になった。


フォーラムに書いた。