欧拉计划 57

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值