簡體   English   中英

如何使用 python 檢查素數

[英]How to check for a prime number using python

我編寫了下面的代碼來檢查素數,但是當我運行代碼時, ifelse語句都執行相同的 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.

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