开发者社区> wayne_dream> 正文

Python---试除法求质数的三种方式对比

简介: 此三种方法都是基于试除法,即不断地尝试能否整除。比如要判断自然数 x 是否质数,就不断尝试小于 x 且大于1的自然数,只要有一个能整除,则 x 是合数;否则,x 是质数。
+关注继续查看

此三种方法都是基于试除法,即不断地尝试能否整除。比如要判断自然数 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以内质数时三种方法的运算速度差不多,第二种似乎占据一定优势,那来看一看如果不断增大范围,三种方法的运行速度到底有多大的差别。。。。。。

img_03d8abcecea8477508defad6e0bdd4cb.png
三种方式差别

显而易见,在范围10000之前,三种方式差别不大,但在10000以后,他们之间的差距呈几何扩大,可得,第三种方法远远快于前两种方法

后续,还可以尝试先将偶数去除(除2以外),再来进行试除,速度一定再上一个台阶,当然求质数还有其他N种方法,比如筛法,其发明人是公元前250年左右的一位希腊大牛——埃拉托斯特尼
首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数......
上述过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
python--测试使用不同的方式计算位涡平流项的差异
python--测试使用不同的方式计算位涡平流项的差异
68 0
【python】输入以及print()函数的三种输出方式
【python】输入以及print()函数的三种输出方式
92 0
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
为什么要用 ax ,而不是 plt 呢? 因为在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!
458 0
考点:星号的巧妙使用方式,包含计算、传参【Python习题08】
考点:星号的巧妙使用方式,包含计算、传参【Python习题08】
41 0
python接口自动化(十)--post请求四种传送正文方式(详解)
post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等。我们要知道post请求四种传送正文方式首先需要先了解一下常见的四种编码方式
255 0
python 外部传参程序编写并打包exe及其调用方式
每种编程语言相互联系又相互独立,为此使用某种编程语言编写的程序都能够独立封装和生成自己的运行程序exe或者其他的API接口。而对于这样的运行程序目的往往不是用于双击使其运行的,而是通过外部传入的参数运行其中的内核函数达到某种目的的。所以在此研究python如何编写外部传参的程序,并将其封装未exe便于外部使用。
284 0
Python最详细的Excel操作方式,你值得拥有!
Python最详细的Excel操作方式,你值得拥有!
182 0
Python基础记录下字符串模糊匹配的方式
使用Python的difflib库中get_close_matches方法
116 0
Python参数传递的方式
Python参数传递的方式自制脑图 实参传递方式:位置参数和关键字参数。位置参数,将对应位置的实参赋值给对应位置的形参。第一个实参赋值给第一个形参,第二个实参赋值给第二个形参,以此类推。关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数。
43 0
Python学习之路——函数参数传递的方式
开发者学堂课程,了解Python语言的基本特性、编程环境的搭建、语法基础、算法基础等,了解Python的基本数据结构,对Python的网络编程与Web开发技术具备初步的知识,了解常用开发框架的基本特性,以及Python爬虫的基础知识。 课程地址:https://developer.aliyun.com/learning/course/601/detail/8724
235 0
+关注
wayne_dream
努力,努力,再努力
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
双剑合璧-Python和大数据计算平台的结合
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多