59 lines
1.2 KiB
Python
59 lines
1.2 KiB
Python
'''
|
|
It is possible to show that the square root of two can be expressed as an infinite continued fraction.
|
|
|
|
By expanding this for the first four iterations, we get:
|
|
|
|
The next three expansions are
|
|
|
|
,
|
|
|
|
, and
|
|
|
|
, but the eighth expansion,
|
|
|
|
, is the first example where the number of digits in the numerator exceeds the number of digits in the denominator.
|
|
|
|
In the first one-thousand expansions, how many fractions contain a numerator with more digits than the denominator?
|
|
'''
|
|
|
|
import math
|
|
import time
|
|
|
|
def t(n, dDict):
|
|
assert n >= 0
|
|
|
|
if n == 0:
|
|
return 1, 1
|
|
|
|
num, denom = d(n-1, dDict)
|
|
return (num + denom, denom)
|
|
|
|
def d(n, dDict):
|
|
assert n >= 0
|
|
|
|
if n == 0:
|
|
return 1, 2
|
|
|
|
if n in dDict.keys():
|
|
return dDict[n]
|
|
|
|
num, denom = d(n-1, dDict)
|
|
r = (denom, 2 * denom + num)
|
|
dDict[n] = r
|
|
return r
|
|
|
|
def main():
|
|
print("Hello, this is Patrick")
|
|
t0 = time.time()
|
|
|
|
counter = 0
|
|
dDict = {}
|
|
for n in range(1001):
|
|
num, denom = t(n, dDict)
|
|
if len(str(num)) > len(str(denom)):
|
|
counter += 1
|
|
|
|
print(counter, time.time() - t0)
|
|
|
|
if __name__ == "__main__":
|
|
main() |