[英]Trying to find the 1000th prime number
我正在嘗試在python中編寫腳本以找到第1000個素數。 我不明白為什么這在這里不起作用。 基本上,當mod小於數字的平方根並且仍然有余數時,mod會增加一。 這應該一直持續到mod等於數字的平方根為止。 然后,支票應保持為0,且數字應為質數。 每次我嘗試運行腳本時,都會告訴我系統錯誤。
import math
b=2
count=2
next_odd=3
next_prime=1
check = 0
while count<=10:
while b<float(math.sqrt(next_odd)):
if next_odd%b>0:
b+=1
if next_odd%b == 0:
check+=1
if check > 0:
next_prime=next_odd
next_odd+=2
print(next_prime)
b=2
count+=1`
我了解您要嘗試執行的操作,但是很遺憾,您的程序有太多錯誤。 這是一個工作版本。 我做了最小的改變。 希望您可以將以下版本與您自己的版本進行比較,看看您出了什么問題。
import math
count=2
next_odd=3
next_prime=1
while count<=1000:
b=1
check = 0
while b<float(math.sqrt(next_odd)):
b+=1
if next_odd%b == 0:
check+=1
if check == 0:
next_prime=next_odd
print(next_prime)
count+=1
next_odd+=2
通過上述程序,可以成功確定第1000個素數為7919。
(首先,我認為代碼末尾的滴答是堆棧溢出后的錯字,而不是代碼本身)
考慮當next_odd
為質數時發生的情況。 該塊:
while b<float(math.sqrt(next_odd)):
if next_odd%b>0:
b+=1
if next_odd%b == 0:
check+=1
將遞增b
直到next_odd
平方根,而不再遞增check
。 這意味着, if check > 0:
不會通過,因此count
永遠不會增加,然后您就在while count<=10:
旋轉,跳過兩個if
塊,因為它們的條件都是false。
換句話說,當next_odd
為素數時,您實際上並沒有說該怎么辦。 這也是為什么一個例子while
應該在所有你想要做的就是通過數字增量(這是你使用它在這里是什么)沒有真正被使用。 嘗試這樣的事情:
max_num = 10000 # or whatever
for odd in range(3, max_num, 2):
factor_count = 0
for factor in range(2, math.floor(math.sqrt(max_num)) + 1):
if odd % factor == 0:
factor_count += 1
if factor_count == 0:
print(odd)
關於此代碼的幾點要點:
希望有幫助!
哦,請注意,還有許多更有效的方法可以計算素數。 參見https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.