Python---试除法求质数的三种方式对比
此三种方法都是基于试除法,即不断地尝试能否整除。比如要判断自然数 x 是否质数,就不断尝试小于 x 且大于1的自然数,只要有一个能整除,则 x 是合数;否则,x 是质数。
方式1:从 2 一直尝试到 x-1。
方式2:从 2 一直尝试到 x/2。
方式3:从 2 一直尝试到√x。
代码部分
import time import math def f1(x): a = [] for i in range(2, x+1): for j in range(2, i): if i % j == 0: break else: a.append(i) # print(a) def f2(x): a = [] for i in range(2, x+1): y = int(i//2+1) for j in range(2, y): if i % j == 0: break else: a.append(i) # print(a) def f3(x): a = [] for i in range(2, x+1): y = int(math.sqrt(i)+1) for j in range(2, y): if i % j == 0: break else: a.append(i) # print(a) if __name__ == '__main__': t1 = time.clock() f1(100) t2 = time.clock() print('第一种方式所用时间为{}秒'.format(t2-t1)) t3 = time.clock() f2(100) t4 = time.clock() print('第二种方式所用时间为{}秒'.format(t4-t3)) t5 = time.clock() f3(100) t6 = time.clock() print('第三种方式所用时间为{}秒'.format(t6-t5))
运行结果
第一种方式所用时间为0.00011377787891367015秒
第二种方式所用时间为0.00010088897856798095秒
第三种方式所用时间为0.0001515556902717247秒
在计算100以内质数时三种方法的运算速度差不多,第二种似乎占据一定优势,那来看一看如果不断增大范围,三种方法的运行速度到底有多大的差别。。。。。。
显而易见,在范围10000之前,三种方式差别不大,但在10000以后,他们之间的差距呈几何扩大,可得,第三种方法远远快于前两种方法
后续,还可以尝试先将偶数去除(除2以外),再来进行试除,速度一定再上一个台阶,当然求质数还有其他N种方法,比如筛法,其发明人是公元前250年左右的一位希腊大牛——埃拉托斯特尼
首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数......
上述过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java入门之面向对象使用接口编程
假设: 三位互联网风云人物除了本身的职位外,给他们增加医生、警察、司机三个职务。现在他们要去学习一项Java开发的技术,对于老师来讲,三位都是学生,老师只关注学生这一个身份,其他的身份与老师无关。 image.png 使用接口的好处 通用性 隔离性 通用性:无论是医生、警察、司机,通通全部当做学生对待。 隔离性:无论是医生、警察、司机,特有的功能与我无关,我只关心学生相关的功能。 接口的格式与组成部分 接口基本定义格式: public interface 要定义的接口名称 { //...... } 接口当中可以包含的组成部分有: 1.抽象方法 2.常量 3.默认方法(Java8) 4.静态方法(Java8) 5.私有方法(Java9) 接口的抽象方法定义 抽象方法定义:public abstract 返回值类型 方法名称 (参数类型 参数名称); 注意: 1.接口中的抽象方法,修饰符如果要写,必须是:public abstract; 2.接口中的抽象方法,修饰符可以省略不写,默认就是 :public abstract; 3.抽象方法只有方法头,不能有方法体大括号; public int...
- 下一篇
点击一百万次(详解)——bugku
刚刚做了bugku的题目,现在整理一下 写出解题思路,希望能够帮助到那些需要帮助的人 所有的wp都是以一题一篇的形式写出 主要是为了能够让读者更好的阅读以及查找, 希望你们不要责怪!!共勉!!! Challenge 1208 Solves 点击一百万次 80 http://120.24.86.145:9001/test/ hints:JavaScript 解题思路:查看源代码就会得到: <body> <h1 id="goal">Goal: <span id="clickcount">0</span>/1000000</h1> <img id="cookie" src="cookie.png"> <span id="flag"></span> </body> <script> var clicks=0 $(function() { $("#cookie") .mousedown(function() { $(this).width('350px').height...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7,CentOS8安装Elasticsearch6.8.6