python:检查数字是否为素数,指定范围

时间:2014-03-09 07:52:57

标签: python 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),但它既不是真也不是假。这是否意味着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

3 个答案:

答案 0 :(得分:2)

一旦发现该号码不能被任何 True整除,您的函数就会返回j。如果该号码不能被所有 True整除,则只应返回j

作为修复此错误的副作用,您还可以修复错误,因为您的函数有时会返回None(例如,当num3时)。

答案 1 :(得分:1)

int()截断,而不是舍入,所以int(math.sqrt(3) + 1) == 2range(2, 2)为空,因此不会返回任何内容。

另一个问题是,您的else块在循环内。如果您测试前100个数字,您会很快发现is_prime函数会返回True任何奇数。

答案 2 :(得分:0)

3的平方根小于2,因此永远不会输入循环,也不会返回任何内容。