-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path065.py
75 lines (55 loc) · 1.75 KB
/
065.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
"""
Project Euler Problem 65
========================
The square root of 2 can be written as an infinite continued fraction.
2 = 1 + 1
2 + 1
2 + 1
2 + 1
2 + ...
The infinite continued fraction can be written, 2 = [1;(2)], (2) indicates
that 2 repeats ad infinitum. In a similar way, 23 = [4;(1,3,1,8)].
It turns out that the sequence of partial values of continued fractions
for square roots provide the best rational approximations. Let us consider
the convergents for 2.
1 + 1 = 3/2
2
1 + 1 = 7/5
2 + 1
2
1 + 1 = 17/12
2 + 1
2 + 1
2
1 + 1 = 41/29
2 + 1
2 + 1
2 + 1
2
Hence the sequence of the first ten convergents for 2 are:
1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378,
...
What is most surprising is that the important mathematical constant,
e = [2; 1,2,1, 1,4,1, 1,6,1 , ... , 1,2k,1, ...].
The first ten terms in the sequence of convergents for e are:
2, 3, 8/3, 11/4, 19/7, 87/32, 106/39, 193/71, 1264/465, 1457/536, ...
The sum of digits in the numerator of the 10th convergent is 1+4+5+7=17.
Find the sum of digits in the numerator of the 100th convergent of the
continued fraction for e.
"""
from itertools import islice
from typing import Generator, List, Tuple
from sympy import Rational
from utils import digital_sum, contfrac_to_frac
def e_continued_fraction_expansion() -> Generator[int, None, None]:
yield 2
yield 1
yield 2
i = 2
while True:
yield 1
yield 1
yield i * 2
i += 1
num, dom = contfrac_to_frac(list(islice(e_continued_fraction_expansion(), 100)))
print(digital_sum(num))