フィボナッチ数列は以下の漸化式で定義される:
1000桁になる最初の項の番号を答えよ.
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
12番目の項, F12が3桁になる最初の項である.F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144
1000桁になる最初の項の番号を答えよ.
フィボナッチ数を求めていけばよさそうです.
- SICPの反復的プロセスを生成する手続きを参考にフィボナッチ数を求める.
- フィボナッチ数を求める手続きの中で1000桁を超えたか判定する.
手続きは次のようになります.
(require srfi/1) (define (decimal-format nbr) (define (loop ans n) (if (= 0 n) ans (loop (cons (remainder n 10) ans) (quotient n 10)))) (loop () nbr)) (define (fib-list) (define (loop r a b) (if (<= 1000 (length (decimal-format a))) (reverse (cons a r)) (loop (cons a r) b (+ a b)))) (loop () 1 1))
計算してみます.
ようこそ DrRacket, バージョン 5.3.3 [3m]. 言語: Pretty Big; memory limit: 2048 MB. > (length (fib-list)) 4782 >
0 件のコメント:
コメントを投稿