[英]How to check for a prime number using python
我編寫了下面的代碼來檢查素數,但是當我運行代碼時, if
和else
語句都執行相同的 output。
n = int(input("enter a number\n"))
for i in range(2, n):
if n % i == 0:
print(f"{n} is not prime")
else:
print(f"{n} is prime")
Sympy.isprime可能是最有效的方法,除非您想檢查各種數字。 在這種情況下,最好使用埃拉托色尼篩。
如果您不想使用模塊或半復雜的算法,如果您只需要檢查幾個小於 10**6 的數字,則以下純代碼可以完美運行。
def isprime(num):
for n in range(2,int(num**0.5)+1):
if num%n==0:
return False
return True
您遇到的問題是您的循環在每次迭代時都會打印出一些東西。 如果您只想在確定n
是素數時打印它,則不能這樣做。 只有當整個循環完成時,您才能確定這一點。
這在 function 中是最簡單的,只要您有明確的答案,您就可以return
:
def prime_check(n):
for i in range(2, n):
if n % i == 0:
return False
return True # this only runs after the whole loop ends
n = int(input("enter a number\n"))
if prime_check(n):
print(f"{n} is prime")
else:
print(f"{n} is not prime")
如果你想保持檢查內聯,而不是使用 function,你也可以這樣做,巧妙地使用break
和附加到循環的else
子句,而不是if
。 這樣的子句僅在循環正常退出時運行,而不是在它被break
語句提前退出時運行。 這可能有點令人困惑,這就是為什么我把它放在第二位,在更清晰的return
版本之后。
n = int(input("enter a number\n"))
for i in range(2, n):
if n % i == 0:
print(f"{n} is not prime")
break
else: # the else is attached to the for loop now, not the if
print(f"{n} is prime") # this line is only runs if no break happened in the loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.