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

Python实现的质数合数判断器输入合数时输出异常问题求解

质数判断程序问题分析与修复方案

问题根因

现有代码存在2个核心逻辑错误:

  • 循环内直接输出判断结果:只要当前遍历的数无法整除输入值,就直接打印Its prime!,没有完成所有可能因子的校验。比如输入55时,55除以2余1就会先判定是质数,后续遍历到5时55能被5整除,又会判定不是质数,最终产生多条矛盾的输出。
  • 遍历区间设置错误:Python的range是左闭右开区间,range(2, num//2)不会包含num//2这个值,当输入的质数的最小因子刚好等于num//2时会出现漏判,小于4的数也会因为循环为空直接无输出。

修复方案

调整判断逻辑,通过标记位记录质数状态,遍历过程中仅修改状态、找到因子直接终止循环,遍历完成后统一输出结果,同时优化遍历区间提升运行效率,修复后代码如下:

num = int(input("Enter A NUMBER: "))

def primeornot(n):
    # 处理小于2的特殊值,既不是质数也不是合数
    if n < 2:
        print(n, "既不是质数也不是合数")
        return
    is_prime = True
    # 遍历到平方根即可完成校验,右边界+1适配range左闭右开规则
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            is_prime = False
            # 找到因子直接跳出循环,无需继续遍历
            break
    if is_prime:
        print(n, "是质数")
    else:
        print(n, "是合数")
    
primeornot(num)

修复点说明

  • 移除循环内的输出逻辑,统一遍历结束后根据标记位输出结果,避免多条矛盾输出
  • 新增小于2的边界值处理,覆盖所有输入场景
  • 遍历区间从num//2优化到n的平方根,相同输入下循环次数最多可减少一半以上,运行效率更高
  • 补充range右边界的+1操作,避免因子漏判
  • 将输入值作为参数传入函数,消除全局变量依赖,逻辑更严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:00:00