geo_analysisの日記

エンジニアになりたい無職のProjectEuler

プロジェクトオイラー2

プロジェクトオイラーの2問目をpythonを使って解いてみました。
問題
フィボナッチ数列の値で4百万を超えない値の、偶数値の総和を求めよ。
下のMに4000000を代入すれば答えが出ます。

M = int(input()) #フィボナッチ数列の値の上限
def fibonacci(n): #フィボナッチ数列の第n番目の項
    fib_numbers = [1, 1]
    if n == 1:
        return 1
    else:
        while len(fib_numbers) < n + 1:
            p = len(fib_numbers) - 2
            q = len(fib_numbers) - 1
            fib = fib_numbers[p] + fib_numbers[q]
            fib_numbers.append(fib)
    return fib_numbers[len(fib_numbers) - 1]

start = 1 #フィボナッチ数列の1番目の項から始めた
sum_of_evenfibonacci = 0
N = 1
while  N <= M: #フィボナッチ数列の値がMを超えないもののなかで、偶数値のものだけ和を取った
    if N % 2 == 0:
        sum_of_evenfibonacci += N
    start += 1
    N = fibonacci(start)

print(sum_of_evenfibonacci)