我解决这个问题:素数生成器花费过多时间
通过上市前六个质数:2,3,5,7,11,13,我们可以看到,6号素数是13.
什么是10 001素数?
def checkPrime(x):
facs = 0
for i in range(1,x):
if x%i==0:
facs = facs + 1
if facs == 2:
return True
else :
return False
i = 1
noPrime = 0
done = False
while(done==False):
i = i + 1
print "i = {0} and noPrime={1}".format(i,noPrime)
if checkPrime(i)==True:
noPrime = noPrime + 1
if noPrime==10001 :
print i
done=True
但它采取了大量的时间。
我该如何加快速度?
你使用什么算法? – Paul 2013-03-14 05:03:59
你的'checkPrime'是错误的。 'range(1,x)'的最后一个元素是'x-1',所以你实际上找到的是只有3个除数的数字,即素数的平方。如果你改正了这种情况,通过将'facs'初始化为1或者通过检查'range(1,x + 1)',运行时间将从几千年下降到一小时左右(给出或取10倍)它会给出正确的答案。当然,你还是会想用一个体面的素数测试,在平方根处停下来。 – 2013-03-17 11:53:01