You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于is_prime函数判断9为素数返回True的问题求助

你的素数判断函数问题分析与修复

嘿,这问题我一眼就看出来啦~咱们先把你的代码贴出来,方便分析:

def is_prime(x):
    for i in range(2,x):
        if (x % i) == 0:
            return False
        else:
            return True
print(is_prime(9))

问题出在哪?

你的else分支和return True写在循环内部的if语句同级了!也就是说,当第一次循环i=2时,9除以2余数是1(不等于0),这时候会直接执行else里的return True,函数直接结束,根本没机会检查后面的i=3(而9%3=0,这才是判断9不是素数的关键)。

简单说,函数只检查了第一个除数就提前返回了,完全没完成整个遍历过程。

修复后的代码

我们只需要把return True移到循环结束之后,这样只有当所有可能的除数都检查过,没有找到能整除x的数时,才返回True:

def is_prime(x):
    # 先处理特殊情况:小于2的数不是素数
    if x <= 1:
        return False
    # 遍历到x的平方根就够了,提升效率
    for i in range(2, int(x**0.5) + 1):
        if x % i == 0:
            return False
    # 循环结束都没找到除数,说明是素数
    return True

print(is_prime(9))  # 现在会输出False啦!

额外优化说明

我还加了两个小优化:

  • 先判断x<=1的情况:因为小于等于1的数都不是素数,直接返回False,避免无效循环。
  • 循环范围改成range(2, int(x**0.5)+1):因为如果x有一个大于它平方根的因数,那对应的另一个因数肯定小于平方根,所以只需要检查到平方根就够了,能大幅提升大数字的判断效率。

内容的提问来源于stack exchange,提问作者MINO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:09:06