Issues (956)

solutions/problem25.py (1 issue)

1
"""
2
Project Euler Problem 25: :math:`1000`-Digit Fibonacci Number
3
=============================================================
4
5
.. module:: solutions.problem25
6
   :synopsis: My solution to problem #25.
7
8
The source code for this problem can be
9
`found here <https://bitbucket.org/nekedome/project-euler/src/master/solutions/problem25.py>`_.
10
11
Problem Statement
12
#################
13
14
The Fibonacci sequence is defined by the recurrence relation:
15
16
.. math::
17
18
    F_n = F_{n-1} + F_{n-2}, \\mbox{ where } F_1 = 1 \\mbox{ and } F_2 = 1.
19
20
Hence the first :math:`12` terms will be:
21
22
.. math::
23
24
    F_1 &= 1 \\\\
25
    F_2 &= 1 \\\\
26
    F_3 &= 2 \\\\
27
    F_4 &= 3 \\\\
28
    F_5 &= 5 \\\\
29
    F_6 &= 8 \\\\
30
    F_7 &= 13 \\\\
31
    F_8 &= 21 \\\\
32
    F_9 &= 34 \\\\
33
    F_{10} &= 55 \\\\
34
    F_{11} &= 89 \\\\
35
    F_{12} &= 144
36
37
The :math:`12^{th}` term, :math:`F_{12}`, is the first term to contain three digits.
38
39
What is the index of the first term in the Fibonacci sequence to contain :math:`1000` digits?
40
41
Solution Discussion
42
###################
43
44
Simply iterate over the Fibonacci sequence until an :math:`F_n` is encountered containing :math:`1000` digits.
45
46
Solution Implementation
47
#######################
48
49
.. literalinclude:: ../../solutions/problem25.py
50
   :language: python
51
   :lines: 54-
52
"""
53
54
from itertools import dropwhile
55
56
from lib.digital import num_digits
57
from lib.sequence import Fibonaccis
58
59
60
def solve():
61
    """ Compute the answer to Project Euler's problem #25 """
62
    target = 1000
63
    fibs = Fibonaccis()
64
    for n, F_n in dropwhile(lambda elt: num_digits(elt[1]) < target, enumerate(fibs)):
0 ignored issues
show
The variable F_n seems to be unused.
Loading history...
65
        return n
66
67
68
expected_answer = 4782
69