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