[英]Problem with finding prime numbers in range
程序說明:
程序接受一段 N 個數字,在我的例子中是 [1024, 289213]。 那么它應該是 output 該段內所有素數的總和。
我的解決方案:
for i in range(1024, 289213):
isPrime = True
for j in range(2, i // 2):
if (i % j) == 0:
isPrime = False
break
if isPrime:
n += i
print(n)
問題:該程序可以完美地處理小段,例如 [3,17],但是在 [1024, 289213] 的情況下,它需要很長時間才能加載。
問題的根源是什么? 也許還有更好的編碼方式? 先感謝您。
這套代碼將解決您面臨的問題:
from math import sqrt
# Function to compute the prime number
# Time Complexity is O(sqrt(N))
def checkPrime(numberToCheck) :
if numberToCheck == 1 :
return False
for i in range(2, int(sqrt(numberToCheck)) + 1) :
if numberToCheck % i == 0 :
return False
return True
def primeSum(l, r) :
sum = 0
for i in range(r, (l - 1), -1) :
# Check for prime
isPrime = checkPrime(i)
if (isPrime) :
# Sum the prime number
sum += i
return sum
# Time Complexity is O(r x sqrt(N))
if __name__ == "__main__" :
l, r = 1024, 289213
# Call the function with l and r
print(primeSum(l, r))
Output:
3463762527
請注意,獲取 output 需要幾秒鍾的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.