[サイトマップを見る ]
目的
フィボナッチ数列というは,次のような数列です。
$$
1, 1, 2, 3, 5, 8 ,13, 21, 34, 55, ...
$$
11 番目の数字はなんでしょう。$${34+55=89}$$ ですね。足すだけで簡単です。では,2025 番目の数字はなんでしょう。11 番目までしかわかっていなければ,あと 2014回計算しないといけないですね。2014回は,よーし,やってやろうと実際に計算してみると…
ぎゃー!とんでもない数字になりました。なんと 423桁の数字です。うわー。
じゃあ,10000番目はとか言われたら,もう計算するのはしんどいです。
Binet の公式
フィボナッチ数列の n 番目を計算する公式があり,それを Binet の公式といいます。ビネーと読みます。フランス人の名前です。こんなかたちをしています。
$$
F(n) = \frac{ \phi^n - (1-\phi)^n }{\sqrt{5}}
$$
$${\phi}$$ というのは黄金比でおよそ $${1.618 \cdots}$$ です。無理数で計算には以下の式を使います。
$$
\phi = \frac{ 1+\sqrt{5} }{2}
$$
Python のコード
10000 乗の計算を手計算でできないので,Python を使うことにします
import sys
import gmpy2
def binet_gmpy2(n):
phi = gmpy2.mpfr((1 + gmpy2.sqrt(5)) / 2)
return int(gmpy2.floor((phi**n - (1-phi)**n) / gmpy2.sqrt(5)))
result = binet_gmpy2(int(sys.argv[1]))
print(result)
結果は以下のとおり。
2090桁です。
あー,美しい式。どうしてああいうかたちになるのかは別の記事で説明します。
より学びたい方
わたしが好きな先生です。
中学2年生くらいから読むことができます。
小学校6年生の算数の知識があれば,読み始められます。
[ サイトマップを見る ]