[英]python: checking if a number is prime, specifying range
我正在编写的这段代码有问题,以检查数字是否为质数。
import sys
import math
def is_prime(num):
for j in range(2,(int(math.sqrt(num)+1))):
if (num % j) == 0:
return False
else:
return True
for a in range(1,10):
if is_prime(a):
print a
我得到的是:5、7、9
我不明白为什么要排除3个? 我回到了代码的第一部分,尝试了is_prime(3)
,但是它既没有返回True也没有返回False。 这是否意味着3超出了我要检查的除数范围? 我应该如何纠正代码,使素数列表中包含3?
编辑:再次您好,谢谢您到目前为止的答案,所以我试图使用int(round())解决截断的问题。 我也尝试过将else
块放在循环之外,但似乎不起作用。 谁能解释为什么这还不够,并建议我应该如何纠正它才能起作用? 提前致谢! :)
import sys
import math
def is_prime(num):
for j in range(2,int(round(math.sqrt(num)+1)):
if (num % j) == 0:
return False
return True
一旦发现该数字不能被任何 j
整除,您的函数将返回True
。 如果数字不能被所有 j
整除,则仅应返回True
。
作为修复此错误的副作用,您还将修复该错误,该错误有时会使您的函数返回None
(例如,当num
为3
)。
int()
截断而不是int(math.sqrt(3) + 1) == 2
,因此int(math.sqrt(3) + 1) == 2
。 range(2, 2)
为空,因此不会返回任何内容。
另一个问题是您的else
块在循环内部 。 如果测试前100个数字,您将很快注意到is_prime
函数将为任何奇数返回True
。
3的平方根小于2,因此永远不会进入循环并且什么也不返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.