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