我正在尝试编写一个取整数x的函数,如果是prime则返回True,否则返回False。它的工作正常,除了测试数字121时我无法弄清楚原因。这是我的代码:
def is_prime(x):
if x < 2:
return False
elif x == 2:
return True
else:
for i in range(2,x):
if x%i == 0:
return False
else:
return True
当检查121时,它似乎跳过if x%i == 0:
,因为121%11
为0,但它不会返回为False。我错过了一些明显的东西吗?我很感激能得到的任何帮助,谢谢。哦,我正在使用Python 2.7
答案 0 :(得分:8)
你几乎拥有它。你只需要一个微小的改变
def is_prime(x):
if x < 2:
return False
elif x == 2:
return True
else:
for i in range(2,x):
if x%i == 0:
return False
return True
您遇到的问题是由于您不允许循环在返回之前完成所有数字的检查
考虑在121上运行代码时的前几次迭代:
该功能说:
x
是否小于2?x
恰好是2?for i in range(2,x)
)i
是2 所以你需要做的是,在决定返回之前完成遍历for循环中的所有数字,这就是我的修复所做的。
当然(正如Joran Beasley指出的那样),你可以利用任何数字的除数都不大于它的平方根的知识。所以你只需要检查数字本身的平方根:
def is_prime(x):
if x<2:
return False
if x == 2:
return True
else:
for i in xrange(2, int(sqrt(x))+1):
if not n%i:
return False
return True