越快越好,用python输出素数

2018-04-18  本文已影响0人  白洞_set

如何用python实现短时间输出大量素数

import datetime
first = datetime.datetime.now()

def main():
    print("欢迎进入素数输出界面(输出范围内所有素数)")
    n = int(input('请输入查询数字(n>=1):'))

    r = [1,0,0,0,1,0]*(n//6 +1)
    r.insert(0,"0")         #为了索引和实际值能对应相等,便于思考
    r[1] = 0
    r[2] = 1
    r[3] = 1

    for i in range(5,int(n**0.5),2):
        if r[i] == 1:
            for j in range(i*i,n+1,2*i):
                r[j] = 0

    for i in range(1,n+1):
        if r[i] == 1:
            print(i)

    two = datetime.datetime.now()
    print("开始查询时间:",first)
    print("结束查询时间:",two)

if __name__ == '__main__':
    main()

你所要认识的黑科技大法

1、孪生素数

发现没有发现没有,我们再也不用遍历每个自然数,因为素数只存在于 6n+1/6n-1,只需要输出遍历 6n+1/6n-1位置的数。每6个自然数组内,只遍历其中两个数,也就是说我们直接把判断时间缩为原来的1/3

2、吹蜡烛法

3、倍数找因数法

当然由于输出语句,把素数都输出的时间跟传统方法也不会差多少(emmmm....无奈脸)

上一篇 下一篇

猜你喜欢

热点阅读