簡體   English   中英

如何使用for循環檢查一個數是否為素數? (Python)

[英]How to use a for loop to check if a number is prime? (python)

嗨,我的目標是編寫一個程序,我可以在其中檢查一個數字是否為素數。 但是,我在我的代碼中犯了一個錯誤,我不知道如何修復。 例如,如果我輸入 15,它不是質數,它會打印出“num 不是質數”和“num 是質數”。

num = int(input("Enter a positive number to test: "))
while  num < 0: 
    print("Invalid input, try again")
    num = int(input("Enter a positive number to test: "))
prime = False 
for i in range(2,num):
    if num % i == 0: #if remainder is zero, then there is a factor
        print(i, "is a factor of", num, "...stopping")
        print("")
        print(num, "is a not a prime number")
        break
    if num % i != 0:
        print(i, "is not a divisor of", num, "... continuing")
        prime = True
if prime == True: #once the condition from earlier is met, then it'll prove it's a 
prime numer
    print(num, "is a prime number")

當試圖確定一個數 (N) 是否為素數時,您的第一個測試是查看它是否小於 2。如果滿足該條件,則它不是素數。 從那時起,您需要使用一系列素數來檢查 N 的模數,直到 N 的平方根。因此,這是一個如何快速有效地生成素數的問題,這已在 Stackoverflow 中多次回答。 也有確定 N 為素數的概率的策略(通常只用於非常大的數)

這是您的代碼的輸出。

Enter a positive number to test: 15
2 is not a divisor of 15 ... continuing
3 is a factor of 15 ...stopping

15 is a not a prime number
15 is a prime number

問題出在你的 bool 變量素數上。 在 for-cycle 之前,您為其分配FALSE值。 每次在 for-cycle 中,當數字未除以i 時,您將TRUE分配給素數變量。 所以如果第二個條件滿足一次,你的代碼總是打印: given_number is a prime number

您應該更改代碼的邏輯。 在 for 循環之前總是假設給定的數是素數( prime = True )。

prime = True
for i in range(2,num):
    if num % i == 0: #if remainder is zero, then there is a factor
        print(i, "is a factor of", num, "...stopping")
        print("")
        print(num, "is a not a prime number")
        prime = False
        break
    if num % i != 0:
        print(i, "is not a divisor of", num, "... continuing")
num = 13
if num > 1:
    for i in range(2, num//2):
        if (num % i) == 0:
            print(num, "is not a prime number")
            break
        else:
            print(num, "is a prime number")
else:
    print(num, "is not a prime number")

暫無
暫無

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

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