快速找出N以内的所有素数解法,python版本。这个应该是最快的了

作者:Raffeale/于大伟

质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。

一般正常人的解法是两次循环,假设求小于N的所有素数。一次用N-1之间的所有数去除,如果能被整除这个数肯定不是素数。否则是素数。

这个解题的基本思路:

一个数是否是素数其实不需要去除所有N-1的数,在一个群里有人提出一种方法,只要处以N/2之间的所有数字就可以。经过仔细思考,我发现有更快的方法。只要除以这个数的平方根+1之间的所有的即可。这是为什么?听我慢慢道来。

鉴定x是否为素数,最常用的做饭是个从2开始除,一直除到x-1.那么每当用X/n 的时候,N的值依次为[2,3,4,5,6,7,8,9......x-1] .当我们使用X除以2的时候,如果不能整除,说明了x肯定不能被 X/(X/2)整除,并且X不能被小于x/2的值整除。其实就是小学的数学思想,

例如: 10/5 =2  和 10/2=5的性质是一样的。

那么推理证明 X每当除以一个数的时候,N的范围都在缩小。例如,X/2 后 n的范围应该是 x/2-1  ,x/3后N的范围应该x/3-1,说到这里应该明白了吧。

?那也就是说只要一个数不可以被X/10之内所有的数整除的话就说明这个数是素数。这个算法比那个人提出的要快N倍。经过测试在1000000中找出所有的素数,使用python花费25秒钟左右。估计pypy会非常快。

def primesqrt(n):

    result = list()

    result.append(2)

    result.append(3)

    for i in xrange(5,n+1,2):

        for j in xrange(2,int(sqrt(i))+2):

        #for j in range(2,(i>>4)+1):

            if i%j == 0:

                break

        else:

            result.append(i)

    

    return result

web开发工程师一名,喜欢研究技术,学习新技术.爱好:读书,电影,民谣,乡村音乐,相声,羽毛球,爬山,徒步,动物!
原文地址:https://www.cnblogs.com/raffeale/p/3436236.html