出典: Project Euler (日本語翻訳サイト)
参考: サイエンスもの置き場 プロジェクトオイラーを遊び倒すガイド(初級編)
Problem 25
フィボナッチ数列は以下の漸化式で定義される:
Fn = Fn-1 + Fn-2, ただし F1 = 1, F2 = 1.
最初の12項は以下である.
- F1 = 1
- F2 = 1
- F3 = 2
- F4 = 3
- F5 = 5
- F6 = 8
- F7 = 13
- F8 = 21
- F9 = 34
- F10 = 55
- F11 = 89
- F12 = 144
1000桁になる最初の項の番号を答えよ.
私の解答例は以下です。
-----
def f(n): if n<1: return False i, a, b = 1, 1, 0 while len(str(a))<n: i, a, b = i+1, a+b, a return i print f(1000)-----
1.関数f(n)
・n桁になる最初のフィボナッチ数の項の番号を返します。
・if n<1: return False
定義から、最初に1桁になるのは項の番号=1なので、1未満はFalseを返します。
・i, a, b = 1, 1, 0
iは項の番号、aはFn-1、bはFn-2 です。
3つの変数を一度に初期化します。
項の番号=1のとき、1つ前のF0=1、2つ前は0です。
・while len(str(a))<n:
フィボナッチ数aを文字型にして文字列数を求め、指定桁n未満ならば処理を続けます。
・ i, a, b = i+1, a+b, a
フィボナッチ数を1つ進めます。
項番号iは+1、a(=Fn-1)はa+b、b(=Fn-2)はa(=Fn-1)にします。
2.関数の外
・上記の関数fに、指定桁1000を渡せば求める値になります。
解答はこのすぐ下の行です。文字の色を白にしてます。選択状態にすると見えます。
4782
(追記)
・20120715
ソースコード部分にSyntaxHighlighterを導入。
0 件のコメント:
コメントを投稿