Project Euler始めた
Project Euler解き始めました。自分の数学の勉強も兼ねて、できるだけプログラムでの力技の計算は避けようと思っています。どうしてもプログラミングが必要なやつは、あとでrowlで書こうと思ってます。
Problem 2
4000,000以下のフィボナッチ数のうち偶数の物の和を求めよ。
書き出してみると
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
なので3n項目が偶数になる事がわかります。帰納法で証明できます。
フィボナッチ数列の一般項は
ですから偶数の項は
です。等比数列の和の公式を使って
が求める和です。ここで一般項、和ともに第2項の絶対値は0.5未満ですから、第1項だけ計算してもっとも近い整数に丸めれば答えが出ます。
f(3n) <= 4000,000となるnも対数つかって求められます。従ってRubyでの解答は以下のようになります。
include Math SQRT5 = sqrt(5) PHI3 = ( (1 + SQRT5)/2 )**3 n = ( log(4000_000 * SQRT5) / log(PHI3) ).floor # 項数 puts ((PHI3**(n+1)-1) / (SQRT5 * (PHI3 - 1))).round # 和