簡體   English   中英

查找第 1000 個素數(python)調試

[英]Finding the 1000th prime number (python) debug

我正在嘗試編寫代碼來計算第 1000 個素數,但我的循環計數器遇到了我不理解的問題。

prime_test = 1
count=0
for count in range(0,1001):
    for divisor in range(2,prime_test):
        if (prime_test % divisor) == 0:
            break
    else:
        print(prime_test)
        count += 1
    prime_test+=1

有人可以解釋為什么上面的代碼功能失調嗎? 問題是 count 變量以與 prime_test 變量相同的速率迭代。 如何將兩者分開,以便計數僅在找到新素數時增加,而不是在使用循環時增加?

不要使用for count in range(0, 1001): 這只是按順序遞增計數,而不是在找到素數時。 使用while循環。

prime_test = 2
count = 0
while count < 1000:
    for divisor in range(2,prime_test):
        if (prime_test % divisor) == 0:
            break
    else:
        print(prime_test)
        count += 1
    prime_test += 1

您還應該從2而不是1開始prime_test ,因為1不是質數,但您的算法會說它是。

同一件事的另一個答案可能需要重復上千次才能被理解。

在循環之前設置c的值根本沒有任何影響,並且循環分配值內的c的新值將被下一個循環循環覆蓋,因為c提供的下一個值將設置為range()的下一個值。 for c in range()其他一些編程語言中的循環不同。 所以每個新手都必須通過這個 go...想知道它是怎么來的。

以下代碼演示了這一點:

c = 100
for c in range(5):
    print(c, end=' -> ')
    c = c + 5
    print(c)

印刷

0 -> 5
1 -> 6
2 -> 7
3 -> 8
4 -> 9


如果您將代碼更改為:

prime_test = 2
counter=0
for count in range(0,11):
    for divisor in range(2, prime_test):
        if (prime_test % divisor) == 0:
            break
    else:
        print(prime_test)
        counter += 1
    prime_test+=1
print(f'{counter=} , {prime_test=} ')

你會得到 output:

2
3
5
7
11
counter=5 , prime_test=13

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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