【Project Euler】No2:Even Fibonacci numbers 解答例【Python】

【Project Euler】No2:Even Fibonacci numbers 解答例【Python】

はじめに

コジマです。

https://projecteuler.net/
の2問目を解いていきます。

フィボナッチ数列なんですけど、以前触れています。
初めてLTしてきました。

懇切丁寧な解説はないのでご承知おきください。

問題

問題2

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1,2,3,5,8,13,21,34,55,89,…

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

和訳(意訳)
フィボナッチ数列の新しい項は前2つの項の和で生成される。1、2から始め、最初の10項は以下のようになる:1,2,3,5,8,13,21,34,55,89,…4,000,000を超えないフィボナッチ数列の項を考える場合、偶数の項の総和を求めよ。

偶数の項なのか偶数番目の項なのか和訳するときに迷ってしまった…

解答例

フィボナッチ数列の漸化式ではなくて、一般項を使ってみました。
再帰処理が要らなくなるからロジック考えなくていいよなという打算ですw

# 毎回これだけは入れることにしとく
import numpy as np
import math

# 初期化
n = 1
# n番目の項を求める(一般項)
r5 = math.sqrt(5) # math.sqrt(5)って書くのだるい
an = 0 # 初期化

# この問題の閾値
an_max = 4000000

# 得た値の中で偶数のものはここにいれてく
fib_even = []

# 数列を格納していく
while an < an_max:
    # anを求める(フィボナッチの一般項)
    # anが整数になるのは自明としちゃう
    an = int( (1.0 / r5) * ( ((1.0 + r5)/2.0)**n - ((1.0 - r5)/2.0)**n) )

    # 偶数の項がほしい
    if an % 2  == 0:
        fib_even.append(an)
    # 項を進める
    n+=1
    
# 答えを求める
print("答えは :{}".format(sum(fib_even)))

さいごに

解答はgithubにも上げています。
https://github.com/kojimanotech/project_euler/blob/master/0002_Even_Fibonacci_numbers.ipynb

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


Pythonカテゴリの最新記事