項目歐拉的問題7說:尋找10001素 - 如何優化?
通過上市前六個質數:2,3,5,7,11,13,我們可以 看到,第六屆主要是13.什麼是第一萬○一素數?
下面是我用Python編寫的代碼:
def primes(n):
primes = []
attempt = 3
while len(primes) < (n-1):
for i in range(len(primes)):
if attempt % primes[i] == 0:
attempt += 2
break
else:
primes.append(attempt)
print (primes)
return (primes)
在測試一個數字,如果發現該號碼整除列表中的素數之一,for循環中斷,並以更大的數字重新開始。如果它不能被整除,它會被添加到素數列表中。這一直持續下去,直到列表的大小足夠大(在這種情況下是10000,而我省略了2,因此列表的最後一個成員是10001st素數)
問題是,這是非常慢的。我已經看到其他可以明顯解決這個問題的解決方案是秒,如果不是更少。有什麼方法可以讓我更快樂?
尋找術語「總理篩」可能會給你有用的結果。 – Kevin
[Eratosthenes的篩子](http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes) –
此外,只需使用'numpy'對數值進行簡單的更改就可以加快速度,不要使用for-loop,手段。 – zeroth