3 回答
TA贡献1803条经验 获得超3个赞
因为您的程序永远不会进入循环。
for d in range(2, n):
if n % d == 0:
return False # Is not prime
return True
从 2 开始,直到n-1. 此外,您应该以不同的方式缩进。只有在您的程序退出循环后,您才应该return True:
for d in range(2, n):
if n % d == 0:
return False # Is not prime
return True
但是如果你想优化你的功能,它应该是这样的:
def is_prime_v1(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for d in range(3, round(n**0.5) + 1, 2):
if n % d == 0:
return False
return True
由于您不需要检查数字本身,因此只有平方根。此外,任何偶数都不能是素数(2 除外),因为它可以被 2 整除。
编辑:
我很高兴我的回答有帮助:)
TA贡献1801条经验 获得超8个赞
您可以明确地将 2 定义为素数。
return True在您的 for 循环内,因此仅在 1 次迭代后返回 true (这就是您有错误的原因)。
对于素数,只检查您正在测试的数字的平方根就足够了,这对于较大的 n 应该会大大加快速度。
尝试这个
def is_prime_v1(n):
""" Return 'True' if 'n' is a prime number. False otherwise. """
if n == 1:
return False # 1 is not prime
elif n == 2:
return True
for d in range(2, int(n**0.5) + 1):
if n % d == 0:
return False # Is not prime
return True
TA贡献1818条经验 获得超7个赞
for d in range(2, n):
if n % d == 0:
return False # Is not prime
return True
像为 1 一样为它创建一个单独的 if。
if n == 2:
return True #2 is prime
添加回答
举报