[英]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.