找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 2046|回复: 0

[求助] 大神们求助啊!!特别是第三题,死活不对!!!

2

主题

3

帖子

3

积分

贫民

积分
3
wx_vfKjTd77 发表于 2018-11-14 23:20:43 | 显示全部楼层 |阅读模式
  • 请在指定位置编写程序,完成函数,实现上述Eratosthenes筛子算法。
    提示:用list来存放最初的数列,以及最终的结果。
回忆一下问题求解的步骤,最后一步“回头看”还没有做。具体到筛选素数的问题,可以问很多“回头看”的问题:结果对吗?为什么?问题求解的效率还能提高吗?
通过观察,可以发现每次从序列中划去的整数满足两个条件:
  • 比n小
  • 是合数,能表示成a×b
那么,a或b或二者都必须小于\sqrt[2]{n}​2​​√​n​​​。所以,当序列的第一个数大于等于\sqrt[2]{n}​2​​√​n​​​时,就可以结束循环了。
2. 基于上述观察得到的线索,请优化Eratosthenes筛子算法,并在指定位置编写程序,完成函数,实现优化后的算法。
提示:用list来存放最初的数列,以及最终的结果。
这种改进是否能改善了效率呢?可以在代码中插入一些“探针”,来统计循环次数,或利用python的time库,计算循环前后的时间。如下面代码所示:
  • from time import clock
  • count = 0
  • start = clock()
  • sum = 0.0
  • for i in range(100):
  •     sum += i
  •     count += 1
  • end = clock()
  • print(count, end-start)
这段代码中的变量count用来统计循环的执行次数,for循环前后的代码分别获得开始执行的时刻和执行完毕的时刻,两个时刻的差就是运行时间。
3. 请利用上述方法,重新编写第一题和第二题的函数,插入统计循环次数的代码,在函数中循环执行完后,输出循环次数。(只统计外层循环的执行次数)

回复

使用道具 举报

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

本版积分规则

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