嗨,我的目標是撰寫一個程式,我可以在其中檢查一個數字是否為素數。但是,我在我的代碼中犯了一個錯誤,我不確定如何修復。例如,如果我輸入 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")
uj5u.com熱心網友回復:
當試圖確定一個數 (N) 是否為素數時,您的第一個測驗是查看它是否小于 2。如果滿足該條件,則它不是素數。從那時起,您需要使用一系列素數來檢查 N 的模數,直到 N 的平方根。因此,這是一個如何快速有效地生成素數的問題,這已在 Stackoverflow 中多次回答。也有確定 N 為素數的概率的策略(通常只用于非常大的數)
uj5u.com熱心網友回復:
這是您的代碼的輸出。
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")
uj5u.com熱心網友回復:
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")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/323484.html
下一篇:用python生成馬爾可夫數列
