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

C++质数判断程序输入1无输出问题求助

问题原因及修复方案

问题根源

当输入为1时,代码逻辑出现了遗漏:

  • 1是奇数,满足else if(input % 2 != 0)的条件,进入该分支
  • 但分支内的for循环初始值i=3,循环条件i <= input等价于3 <= 1,条件不成立,循环体根本不会执行,自然没有任何输出语句被触发

修复方案

根据质数的定义(大于1的自然数,且只能被1和自身整除),我们需要先单独处理input <= 1的情况,再处理后续逻辑。修复后的代码如下:

if(input <= 1){
    std::cout << input << " is not a prime number.\n";
}
else if(input == 2){
    std::cout << input << " is a prime number.\n";
}
else if(input % 2 != 0){
    bool isPrime = true;
    // 优化:循环只需到sqrt(input),减少不必要的计算
    for(int i = 3; i * i <= input; i+=2){
        if(input % i == 0){
            isPrime = false;
            break;
        }
    }
    if(isPrime){
        std::cout << input << " is a prime number.\n";
    }
    else{
        std::cout << input << " is not a prime number.\n";
    }
}
else{
    std::cout << input << " is not a prime number.\n";
}

额外优化说明

原代码的for循环遍历到input本身效率较低,优化为遍历到sqrt(input)(用i*i <= input避免浮点运算),只要在这个范围内找到能整除的数,就说明不是质数,能大幅减少循环次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:53:11