1000-digit Fibonacci number

The Fibonacci sequence is defined by the recurrence relation:

$$ F_n = F_{n−1} + F_{n−2}, where F_1 = 1 and F_2 = 1.$$ Hence the first 12 terms will be:

$$ F_1 = 1 $$ $$ F_2 = 1 $$ $$ F_3 = 2 $$ $$ F_4 = 3 $$ $$ F_5 = 5 $$ $$ F_6 = 8 $$ $$ F_7 = 13 $$ $$ F_8 = 21 $$ $$ F_9 = 34 $$ $$ F_{10} = 55 $$ $$ F_{11} = 89 $$ $$ F_{12} = 144 $$

The 12th term, $$ F_{12} $$, is the first term to contain three digits.

What is the index of the first term in the Fibonacci sequence to contain 1000 digits?


Idea

A problem to introduce a new math concept.

Generate Fibonacci number and check if contains 1000 digits


In [1]:
def generate_fibonacci():
    pre, nxt = 0, 1
    while True:
        pre, nxt = nxt, pre + nxt
        yield pre
In [2]:
for i, f in enumerate(generate_fibonacci(), 1):
    if i > 12:
        break
    print("{index}: {fib}".format(index=i, fib=f))
1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13
8: 21
9: 34
10: 55
11: 89
12: 144
In [3]:
def solve(digit_len):
    for i, f in enumerate(generate_fibonacci(), 1):
        if len(str(f)) > digit_len-1:
            return i
In [4]:
solve(3)
Out[4]:
12
In [5]:
solve(1000)
Out[5]:
4782