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

关于C++素数判断循环代码的两处逻辑疑问求解

素数判断代码的逻辑疑问解答

先看你提供的C++代码:

using namespace std;

int main() {
    
    int i, n;
    bool is_prime = true;
    
    cout << "Enter a positive integer: ";
    cin >> n;
    
  
    if (n == 0 || n == 1) {
        is_prime = false;
    }
    
    
    for (i = 2; i <= n/2; ++i) {
        if (n % i == 0) {
            is_prime = false;
            break;
        }
    }
    
    if (is_prime){
        cout << n << " is a prime number" << " checked against : " << i << endl;
        cout << endl;
    }
    else
        cout << n << " is not a prime number"<< " checked against : " << i << endl;
    cout << endl;
    
    return 0;
}

疑问1:为什么数字2会被判定为素数?

当输入n=2时,代码里的for循环条件是i <= n/2,也就是2 <= 1——这个条件不成立,所以循环体根本没有执行。is_prime的初始值是true,也没有被任何代码修改,所以最终判定2是素数。你担心的2%2==0的情况,其实根本没机会触发,因为循环连一次都没跑。

疑问2:为什么判断9时,9%2≠0但循环继续到i=3?

循环的逻辑是:只要i <= n/2(n=9时,n/2=4),就会持续迭代。只有当找到能整除n的i时,才会通过break终止循环。

  • 当i=2时,9%2=1≠0,不会触发is_prime=false和break,所以循环继续执行,i自增到3;
  • i=3时,9%3=0,触发条件,把is_prime设为false并break终止循环,最终判定9不是素数。

简单说,循环不会因为某次余数不为0就停止,它会一直检查到i超过n/2,或者中途找到能整除的数才停下来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:34