我是计算机科学和编程的新手。我正在编写一个免费的在线课程,其中一个任务就是编写一个能够生成第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生成了“假”,即使它们是素数。
任何帮助将不胜感激。谢谢。