簡體   English   中英

尋找范圍內素數的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM