繁体   English   中英

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

[英]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 (例如,当num3 )。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM