對於這個問題,我需要在更大的數字中找到最大的素數。爲了舉例說明,假設較大的數字是「123456789」,那麼我需要檢查的一些數字是12,456,234567等。查找數字「內」的最大素數
我寫了一些Python代碼來解決這個問題,但是我試圖檢查的數字運行速度非常慢。我正在使用的實際數字大約是10000位數,所以我需要查看很多數字。這裏是我的代碼:
num = "123456789"
def isPrime(n):
# 0 and 1 are not primes
if n < 2:
return False
# 2 is the only even prime number
if n == 2:
return True
# all other even numbers are not primes
if not n & 1:
return False
# range starts with 3 and only needs to go up the squareroot of n
# for all odd numbers
for x in range(3, long(n**0.5)+1, 2):
if n % x == 0:
return False
return True
def largestPrime():
largest = 2
for i in range(0,len(num)):
for j in range(i+1,len(num)):
if isPrime(long(num[i:j])):
if long(num[i:j]) > largest:
largest =long(num[i:j])
print largest
def main():
largestPrime()
main()
我敢肯定,這個代碼給出了正確的答案,但正如我所說,這是很慢。任何人都可以幫我弄清楚如何加快速度?
感謝您的幫助!
一個明顯的改進:重新排列'if isPrime ... if最大'到'if>最大... if isPrime',所以如果它大於你找到的最大素數,遠(如果它更小,你不關心它是否是素數)。 –
有許多主要的測試算法比你寫的天真的算法更高效。特別是如果你能接受誤報 - 你可以;所有你需要做的就是保留一個最大的「可能素數」數字的排序列表,然後最後做最緩慢但保證正確的測試。當然,您需要做一些研究來選擇最適合您需要的算法。 – abarnert
您的主要檢測算法是主要瓶頸。僅僅發現整個10000位數字是否爲總數會對他的算法花費一些時間。查看http://en.wikipedia.org/wiki/Primality_test以獲得更好的測試。 – Lalaland