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

我的Python质数检查器异常:2、3等质数被误判为非质数

质数判断代码的错误修复

问题根源

  1. 返回语句缩进错误:check_prime函数里的return True被写在了for循环内部,导致循环只执行一次就返回结果。比如输入9时,仅检查除数2就返回True,错误判定9为质数;
  2. 边界值处理缺失:输入2时,range(2, 2)是空序列,循环不会执行,函数无返回值默认返回None,被判定为非质数。

修正后的代码

def prompt_input(input_msg, error_msg):
    while True:
        userinput = input(input_msg)
        try:
            integer = int(userinput)
            if integer > 1:
                return integer
            print(error_msg)
        except ValueError:
            print(error_msg)
    
def check_prime(number):
    # 直接判定2为质数
    if number == 2:
        return True
    # 除2外的偶数都不是质数
    if number % 2 == 0:
        return False
    # 优化循环范围:仅检查到number的平方根,减少迭代次数
    for i in range(3, int(number**0.5) + 1, 2):
        if number % i == 0:
            return False
    # 所有可能除数检查完都无法整除,判定为质数
    return True

primenum = prompt_input(
    "Give an integer that's bigger than 1: ",
    "You had one job"
)

if check_prime(primenum):
    print("This is a prime.")
else:
    print("This is not a prime.")

修正说明

  • 把return True移到for循环外部,确保遍历完所有可能的除数后再返回质数判定;
  • 新增对2的直接判定,同时提前过滤非2的偶数,还将循环范围缩小到目标数的平方根,大幅提升代码运行效率;
  • 输入2、3这类质数时,函数会正确返回True,输出对应判定结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:41:04