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

如何用for循环实现质数判断?Python代码错误排查

原代码问题说明

原代码存在两个核心逻辑错误,直接导致合数误判:

  • 分支绑定错误:代码里的else和循环内的if做了配对,而非和外层for循环配对。这意味着函数只会校验第一个除数2,只要x不能被2整除就会直接返回True,根本不会遍历后续的除数。比如判断9时,9除以2余1,就直接触发return True,完全不会校验到真正的因数3,这就是9、25这类不能被2整除的合数被误判的根本原因。
  • 边界场景缺失:按照质数定义,质数是大于1、且仅能被1和自身整除的自然数,原代码没有处理x<2的输入(0、1、负数都属于非质数);当输入x=2时,range(2,2)是空序列,循环不会执行,函数会返回None而非正确结果True。

额外提一个可优化点:判断因数不需要遍历到x-1,因为因数是成对出现的,只要遍历到x的平方根即可,能大幅减少大数值判断时的计算量。

修正方案

核心逻辑修复(仅解决误判问题)

如果暂时不考虑效率和边界兼容,只需要把return True的逻辑移出for循环,等所有除数都校验完成后再返回结果即可,修改后代码如下:

def check_prime(x):
    for i in range(2,x):
        if x%i==0:
            return False
    return True

这个版本已经可以正确判定9、25等合数为非质数,但仍存在边界兼容问题、遍历效率偏低的缺陷。

完整优化版本

补全边界处理、优化遍历范围后的可直接投产代码:

import math

def check_prime(x):
    # 过滤小于2的非质数
    if x < 2:
        return False
    # 遍历范围取平方根+1,避免漏判整数平方根的情况,减少无效计算
    for i in range(2, int(math.sqrt(x)) + 1):
        if x % i == 0:
            return False
    # 完整遍历完所有可能除数都没找到因数,才判定为质数
    return True
效果验证
  • check_prime(9):遍历到i=3时触发整除判断,返回False
  • check_prime(25):遍历到i=5时触发整除判断,返回False
  • check_prime(2)、check_prime(7)等质数会正常返回True
  • 输入0、1、负数会直接返回False,符合质数定义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:54:20