鱼C论坛

 找回密码
 立即注册
查看: 1780|回复: 1

[技术交流] 小练习结果揭晓:考察2的平方根的展开

[复制链接]
发表于 2017-2-6 20:12:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原帖子:http://bbs.fishc.com/thread-82007-1-1.html
题目:

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, 和 577/408, 但是第八次迭代的展开, 1393/985, 是第一个分子的位数超过分母的位数的例子。

在前 1000 次迭代的展开中,有多少个的分子位数超过分母位数?

题目很简单,用迭代就可以,如果用递归由于次数太多速度会成问题。
正确答案是:
153

答案正确的鱼油:
Craigyu  0.00429s
小Q学Python  0.00325s
jerryxjr1220  0.00227s  0.00219s
余欲渔  0.00325s

无论是用时还是思路的巧妙jerryxjr1220都是优胜。

我的写法,程序的效率比大家的差多了。
  1. from time import time
  2. from fractions import Fraction as fr
  3. start = time()
  4. a = fr(1 / 2)
  5. count = 0
  6. for i in range(2, 1001):
  7.     a = 1 / (2 + a)
  8.     sq = 1 + a
  9.     if len(str(sq.numerator)) > len(str(sq.denominator)):
  10.         count += 1
  11. print(count)
  12. print(time() - start)
复制代码




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-7 09:16:35 | 显示全部楼层
棒棒棒!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表