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

Python质数判断函数异常求助:测试结果与预期不符

问题排查与修复方案

你的质数判断代码存在两个关键逻辑错误,导致测试结果不符合预期,我来逐一拆解:

1. 循环内过早返回结果

你的代码在for循环里,只检查了第一个因数就直接返回结果:

  • 比如测试x=333时,第一个检查的是2,333%2≠0,代码立刻返回Prime,但完全没检查后续的3(333÷3=111,显然不是质数)
  • 正确的逻辑应该是:只有当所有小于等于√x的数都不能整除x时,才返回Prime;只要有一个数能整除,就返回Not prime

2. 未处理边界情况

当x=2时,math.sqrt(2)≈1.414,int(math.sqrt(x)+2)得到3,所以range(2,3)生成的是[2],此时2%2==0,代码返回Not prime,但2是最小的质数,这说明代码没有处理x≤2的特殊情况:

  • x<2:不是质数(比如1、0、负数)
  • x=2:是质数

修正后的代码

import math

def pr(x):
    # 处理边界情况
    if x <= 1:
        return 'Not prime'
    if x == 2:
        return 'Prime'
    # 偶数直接排除(除了2)
    if x % 2 == 0:
        return 'Not prime'
    # 只检查奇数因数,提升效率
    for n in range(3, int(math.sqrt(x)) + 1, 2):
        if x % n == 0:
            return 'Not prime'
    # 所有因数都检查完,没有整除的情况
    return 'Prime'

代码说明

  • 先处理x≤1、x=2的边界,避免进入不必要的循环
  • 提前排除偶数(除了2),减少一半的循环次数
  • 循环只检查从3开始的奇数,直到√x(因为如果x有大于√x的因数,那对应的另一个因数必然小于√x)
  • 只有当所有可能的因数都检查完毕且没有整除时,才返回Prime

测试一下你的两个案例:

  • 输入x=2:直接返回Prime,符合预期
  • 输入x=333:循环检查到3时,333%3==0,返回Not prime,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:19:06