Problem 25 » 履歴 » バージョン 2
Noppi, 2024/01/06 09:37
1 | 1 | Noppi | [ホーム](https://redmine.noppi.jp) - [[Wiki|Project Euler]] |
---|---|---|---|
2 | # [[Problem 25]] |
||
3 | |||
4 | ## $1000$-digit Fibonacci Number |
||
5 | The Fibonacci sequence is defined by the recurrence relation: |
||
6 | |||
7 | > $F_n = F_{n - 1} + F_{n - 2}$, where $F_1 = 1$ and $F_2 = 1$. |
||
8 | |||
9 | Hence the first $12$ terms will be: |
||
10 | |||
11 | <div style="text-align:center">$F_1 = 1$</div> |
||
12 | <div style="text-align:center">$F_2 = 1$</div> |
||
13 | <div style="text-align:center">$F_3 = 2$</div> |
||
14 | <div style="text-align:center">$F_4 = 3$</div> |
||
15 | <div style="text-align:center">$F_5 = 5$</div> |
||
16 | <div style="text-align:center">$F_6 = 8$</div> |
||
17 | <div style="text-align:center">$F_7 = 13$</div> |
||
18 | <div style="text-align:center">$F_8 = 21$</div> |
||
19 | <div style="text-align:center">$F_9 = 34$</div> |
||
20 | <div style="text-align:center">$F_{10} = 55$</div> |
||
21 | <div style="text-align:center">$F_{11} = 89$</div> |
||
22 | <div style="text-align:center">$F_{12} = 144$</div> |
||
23 | |||
24 | The $12$th term, $F_{12}$, is the first term to contain three digits. |
||
25 | |||
26 | What is the index of the first term in the Fibonacci sequence to contain $1000$ digits? |
||
27 | |||
28 | ## 1000桁のフィボナッチ数 |
||
29 | フィボナッチ数列は以下の漸化式で定義される: |
||
30 | |||
31 | > $F_n = F_{n - 1} + F_{n - 2}$, ただし $F_1 = 1$ and $F_2 = 1$. |
||
32 | |||
33 | 最初の12項は以下である. |
||
34 | |||
35 | <div style="text-align:center">$F_1 = 1$</div> |
||
36 | <div style="text-align:center">$F_2 = 1$</div> |
||
37 | <div style="text-align:center">$F_3 = 2$</div> |
||
38 | <div style="text-align:center">$F_4 = 3$</div> |
||
39 | <div style="text-align:center">$F_5 = 5$</div> |
||
40 | <div style="text-align:center">$F_6 = 8$</div> |
||
41 | <div style="text-align:center">$F_7 = 13$</div> |
||
42 | <div style="text-align:center">$F_8 = 21$</div> |
||
43 | <div style="text-align:center">$F_9 = 34$</div> |
||
44 | <div style="text-align:center">$F_{10} = 55$</div> |
||
45 | <div style="text-align:center">$F_{11} = 89$</div> |
||
46 | <div style="text-align:center">$F_{12} = 144$</div> |
||
47 | |||
48 | 12番目の項, $F_{12}$ が3桁になる最初の項である. |
||
49 | |||
50 | 1000桁になる最初の項の番号を答えよ. |
||
51 | |||
52 | ```scheme |
||
53 | 2 | Noppi | (import (scheme base) |
54 | (gauche base) |
||
55 | (scheme list)) |
||
56 | |||
57 | (define fib-generator |
||
58 | (let ([f1 0] [f2 1]) |
||
59 | (let ([fib (^[] |
||
60 | (let ([next (+ f1 f2)]) |
||
61 | (set! f1 f2) |
||
62 | (set! f2 next) |
||
63 | next))]) |
||
64 | fib))) |
||
65 | |||
66 | (define fib-list (generator->lseq 0 1 fib-generator)) |
||
67 | |||
68 | (define answer-25 |
||
69 | (list-index (^n (<= (expt 10 999) n)) fib-list)) |
||
70 | |||
71 | (format #t "25: ~d~%" answer-25) |
||
72 | 1 | Noppi | ``` |