Project Euler 2
明日から帰省するので部屋の掃除などしてたら時間がない。
Project Euler Problem2。
問題文はここからProblem 2 - PukiWiki
このフィボナッチ数列の初項から第3項までは1,2,3となっている。
奇数と偶数の性質として、
- 奇数+奇数=偶数
- 奇数+偶数=奇数
- 偶数+奇数=奇数
というのがある。この性質とフィボナッチ数列の定義より、フィボナッチ数列においては偶数の項が2つおきにしか現われないということが分かる。*1
一般項はフィボナッチ数 - Wikipediaにある通りで、便宜的に初項から1,1,2とすると
となる。
変形してみる。
となる最大のnをNとすると、それぞれ等比数列の和となるので
どうしてもNが必要なので結局フィボナッチ数を逐次計算した方が早そう。誤差も怖いし。
てなわけで
fib1, fib2, fib3 = 1, 2, 3 sum = 0 while fib2 <= 4000000 sum += fib2 fib1 = fib2 + fib3 fib2 = fib3 + fib1 fib3 = fib1 + fib2 end puts sum #=> 4613732
床関数を使って、でも表せるそうだが、普通に足した方が計算は速そう。