簡體   English   中英

Python 素數生成器打印 4

[英]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 循環中你必須測試從2floor(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.

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