伙计们!
我有一个 Codecademy Python 课程练习,其中我必须检查传递的参数是否为素数。我的代码如下所示:
def is_prime(x):
for n in range(2, x-1):
if (x < 2):
return False
elif(x % n == 0):
return True
else:
return False
在我看来,我已经涵盖了所有可能性,但它不断显示此错误:
Your function fails on is_prime(0). It returns None when it should return False.
据我所知,这属于第一个 if 条件。有人可以解释一下这怎么可能吗?
提示,当 x 为 0 时,
range(2, x-1)
里面有哪些数字?
这个版本可能有效。
def is_prime(x):
if (x < 2):
return False
for n in range(2, x-1):
if(x % n == 0):
return False
return True
这里。 这有点快了。 它仅除以可能的素数。 它使用 6k±1 假设。所有大于 3 的素数都是 6(k)±1,因此 6(2)±1 是 11,13 6(6)±1 是 35,37 35 不是素数,但 for 循环 n%5 中的第一个除法测试将抓住所有这些。所有 6k±1 个数除以 6 后都会得到 1 或 5 作为余数。 e 可以用这一行消除 2/3 的数字。
def is_prime(n):
if n<=3: return n > 1
if n%6 not in [1,5]: return False #check 6k±1
for i in range(5,int(n**.5)+1,6):
if (n%i ==0 or n%(i+2)==0): return False
return True