我解決這個問題:素數生成器花費過多時間
通過上市前六個質數: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