繁体   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