2的平方根可以被表示为无限延伸的分数:
√ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + … ))) = 1.414213…
将其前四次迭代展开,我们得到:
1 + 1/2 = 3/2 = 1.5
1 + 1/(2 + 1/2) = 7/5 = 1.4
1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666…
1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379…
接下来三次迭代的展开是99/70, 239/169, and 577/408,
但是第八次迭代的展开, 1393/985, 是第一个分子的位数超过分母的位数的例子。
在前1000次迭代的展开中,有多少个的分子位数超过分母位数?
import math
#f(1) = n / d
#f(2) = 1 + 1 / (f(1) + 1) = 1 + 1 / (n / d + 1) = 1 + d / (d + n) = (2 * d + n) / (d + n)
n = 0
numerator = 3
denominator = 2
for _ in range(2, 1000):
numerator, denominator = (2 * denominator + numerator), (denominator + numerator)
numerator_digits = int(math.log10(numerator)) + 1
denominator_digits = int(math.log10(denominator)) + 1
if numerator_digits > denominator_digits:
n += 1
print(n)