这是在Python中生成第n个素数的最快方法吗?

时间:2017-06-27 20:36:59

标签: python

我是计算机科学和编程的新手。我正在编写一个免费的在线课程,其中一个任务就是编写一个能够生成第1000个素数的程序。

仅供参考,这是在Python 2.5.4中

以下是我在此论坛上从另一个帖子中复制(并编辑了一点点)的原始代码:

def isprime(n):

    if n<2:
        return False
    else:
        for i in range(2,(n/2+1)):
            if n%i==0:
                return False
        else:
            return True

def nthprime(n):
    x=[]
    j=2
    while len(x)<n:
        if (isprime(j)) == True:
            x.append(j)
        j =j+1
    return(x[n-1])

print nthprime(1000)

但是,我认为通过重写isprime(n)函数可以使程序更快,如下所示:

def isprime(n):# First the primality test
    i=1
    if n<2:
        return False
    if (n!=2 and (n/2*2==n)):
        return False
    if n==3:
        return True
    if n==5:
        return True
    else:
        while i <= (n/2+1):
            i+=2
            if n%i==0:
                return False
        else:
              return True  

这样,当只检查n是否可以被奇数整数整除时(​​通过代码中的这一点,我们已经知道n是奇数,因此不能被任何偶数整数整除)。

我认为以这种方式重写它会使程序工作速度提高两倍(因为它只检查了一半的数字),但它似乎花费的时间相同,甚至稍长一些。以前。

另外,有没有办法重写第二个代码块来摆脱:

if n==3:
    return True
if n==5:
    return True 

我包含的唯一原因是因为我意识到我的算法为3和5生成了“假”,即使它们是素数。

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案