[英]Validate if input number is prime
試圖編寫一個程序來檢查一個數字是否是素數。 寫了下面的代碼,但不明白為什么我有2行的output:
num = int(input("Provide number to check if prime: "))
if num <=1:
print("Invalid choice, try again")
num = int(input("Provide number to check if prime: "))
for i in range(2,num):
if num% i ==0:
print("Number is not prime")
break
if num %i !=0:
print("Number is prime")
我的 output 是:
Provide number to check if prime: 15
Number is prime
Number is not prime
sympy.isprime () 是SymPy模塊下的內置 function,可用於檢查可能的素數。 它是一個直接的 function,如果要檢查的數字是素數,則返回 True,如果數字不是素數,則返回 False。
>>> import simpy
>>> sympy.isprime(8)
False
>>> sympy.isprime(11)
True
或者像這樣定義一個 function
>>> def isPrime(k):
# 1 is not prime number
if k==1:
return False
# 2, 3 are prime
if k==2 or k==3:
return True
# even numbers are not prime
if k%2==0:
return False
# check all numbers till square root of the number ,
# if the division results in remainder 0
# (skip 2 since we dont want to divide by even numbers)
for i in range(3, int(k**0.5)+1, 2):
if k%i==0:
return False
return True
>>> print(isPrime(13))
True
>>> print(isPrime(18))
False
首先,你應該記住1
根據定義不是質數,即使它不能被任何其他數字整除:
if (num == 1):
print("The number is NOT prime")
else:
for i in range(2, num):
if (num%i == 0): # If the number has a divisor
print("The number is NOT prime")
break
else: # If the for loop ends without reaching any break
print("The number IS prime")
當循環結束而沒有達到任何break
並且循環至少執行一次時,就會到達for
循環的else
分支。
為了更好地理解我的答案,我建議閱讀此內容。
您的解決方案的錯誤是由於循環打印每次num%i == 0
時數字都是素數,因此采用num = 6
:
6%4 != 0 # The number is prime
6%5 != 0 # The number is prime
正如Rajarshi Ghosh
建議的那樣,您應該知道,在編程時,使用import
ed 函數來執行這個簡單的操作是一個好主意,以避免對這樣一個簡單的工作進行長時間的操作。
如果您不想使用導入的 function,我建議您閱讀 這篇文章,他們解釋了 6 種方法來查找數字是否為素數,而無需使用其他人制作的函數。
您在 output 中遇到問題,不僅針對15
的情況,還針對小於1
的情況。 以下代碼應該可以工作。 它有兩個改進。
else
塊以與for
循環對齊。num = int(input("Provide number to check if prime: "))
while num <=1: #you need to use while loop
print("Invalid choice, try again")
num = int(input("Provide number to check if prime: "))
if num > 1: #only evaluate number is prime or not if it is greater than 1
for i in range(2,num):
if num% i ==0:
print("Number is not prime")
break
else: #to move the `else` block to align with the `for` loop.
print("Number is prime")
break #add a break here
Output:
什么是while循環? while 循環測試輸入條件。 每次循環完成時,都會重新評估條件(僅評估數字是否為素數,如果它大於 1)。 只要輸入的數字<=1
,循環就會繼續執行(不斷詢問用戶輸入)。
如果您只想檢查一個數字是否為素數,只需執行以下操作:
num = int(input("Provide number to check if prime: "))
flagNotPrime = False
if num > 1:
for i in range(2, num):
if (num % i) == 0:
flagNotPrime = True
break
if flagNotPrime:
print("Number is not prime")
else:
print("Number is prime")
首先, <= 1
的數字不是素數。 因此,上面的代碼只有在num
大於 1 時才會繼續。
其次,代碼檢查num
是否可以被從 2 到num - 1
的任何數字整除。 如果該范圍內有一個因子,則該數字不是素數,因此該標志設置為True
並使用break
循環。
最后,在循環之外,如果標志為True
,則num
不是素數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.