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

C++质数判断函数问题:为何原代码误将9判定为质数?

为什么你的isPrime函数会误判9为质数?

嘿,我来帮你把这个逻辑理明白!咱们先看看你原来的代码:

bool isPrime(int n) { 
    for (int i = 2; i < n; i++) { 
        if (n % i == 0) 
            return false; 
        else 
            return true; 
    } 
}

问题就出在那个else return true上——它让你的循环只执行了一次就直接退出了!

拿n=9来举例:

  • 第一次循环i=2,计算9%2结果是1(不等于0),触发else分支直接return true。
  • 这时候函数直接结束,完全没机会检查i=3的情况(而9%3刚好等于0,这才是判断它不是质数的关键)。

换句话说,你的原函数逻辑变成了:只要n不能被2整除,就直接判定它是质数,这显然不对,因为还有3、5、7这些可能的因数呢!

那移除else之后为什么就对了?咱们看修改后的代码:

bool isPrime(int n) { 
    for (int i = 2; i < n; i++) { 
        if (n % i == 0) 
            return false; 
    } 
    // 循环跑完了都没找到能整除n的数,才返回true
    return true; 
}

这里的逻辑是:

  1. 遍历从2到n-1的所有整数,只要找到任何一个能整除n的数,立刻返回false(说明不是质数)。
  2. 如果循环完整执行完了,意味着所有i都试过了,没有找到能整除n的数,这时候才返回true(确实是质数)。

顺便提个小建议:这个函数还有边界情况要处理,比如n<=1的时候应该直接返回false,n=2的时候(最小的质数)也能正确返回true,你可以加上这些判断让函数更严谨:

bool isPrime(int n) { 
    if (n <= 1) return false;
    if (n == 2) return true;
    for (int i = 2; i < n; i++) { 
        if (n % i == 0) 
            return false; 
    } 
    return true; 
}

这样就完全没问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:52:27