[英]Python Prime Number Generator Prints 4
我有一個學校練習,我必須制作一個質數生成器並稍后對其進行優化。 在我做了一些優化之后,我的生成器開始打印數字“4”,這顯然不是素數。
我的代碼如下所示:
import time
#Primzahlen errechnen
c = 0
print("Enter Upper Value:")
Max_wert = input()
x = int(Max_wert)
print("Prime Numbers between 0 and ", x, "are:")
time.sleep(1) # Pause für 2 Sekunden
for num in range(2, x):
num2 = int(num / 2)
for i in range(2, num2):
if (num % i) <= 0:
break
else:
print(num)
c+=1
print(c, "Prime Numbers were found")
當我刪除該行時: > num2 = int(num / 2)
並將 for 循環中的num2
更改回num
然后一切正常。
問題是在 for 循環中你必須測試從2
到floor(sqrt(num))
而不是num/2
(任何進一步的控制都是無用的,看看這個: 為什么我們要檢查素數的平方根以確定數是否為素數? ),以及最重要的,為范圍i
必須之間range(2, num2 + 1)
而不是range(2, num2)
for 循環代碼將是:
for num in range(2, x):
num2 = math.floor(math.sqrt(num))
for i in range(2, num2 + 1):
if (num % i) <= 0:
break
else:
print(num)
c+=1
示例輸出將是:
Enter Upper Value:
10
Prime Numbers between 0 and 10 are:
2
3
5
7
4 Prime Numbers were found
在for i in range(2, num2):
的循環for i in range(2, num2):
當 num 介於 2 和 5 之間時,程序流將不會進入 for 循環。
所以它們 2,3,4,5 只是被打印出來,而不是因為它們是素數或不是素數。
因為num2=int(num/2),當num在[2,5]中時,for循環范圍是(2,1)(2,1)(2,2)(2,2)。
當 num=2,3 range(2,1) 沒有意義時,因為您要求它從 2 開始一直到 1,所以它退出 for 循環並直接轉到 else 塊打印 2 AND 3。
當 num=4,5 range(2,2) 不會給出任何東西,因為你要求它從 2 開始並一直到 2(不包括在內)所以它再次直接進入 else 塊打印 4 和 5。
對於 num 的值,超過 5 個您的代碼按原樣運行。
所以你的 for 循環應該是:
for num in range(2, x):
num2 = int(num / 2 + 1)
for i in range(2, num2):
if (num % i) <= 0:
break
else:
print(num)
c+=1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.