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

C++打印两数间质数代码错误排查:输出重复且包含非质数

问题分析与修正方案

原代码的核心错误

  • 错误输出了检测质数的除数n,而非目标数i,导致非质数的中间值被打印。
  • 未判断目标数i是否通过所有质数检测(即内层循环未触发break),直接输出内容,逻辑完全颠倒。
  • 未处理i < 2的情况,不符合质数(大于等于2的自然数)的定义。
  • 存在无用的全局变量n,与内层循环的局部变量冲突,属于冗余代码。

修正后的代码

#include <iostream>

using namespace std;

int main()
{
    int a, b;
    cout << "enter the first no." << endl;
    cin >> a;

    cout << "Enter the second no." << endl;
    cin >> b;

    // 确保起始数不小于2(质数的最小值)
    if (a < 2) {
        a = 2;
    }

    for (int i = a; i <= b; i++)
    {
        bool isPrime = true;
        // 优化:仅需检测到i的平方根,减少计算量
        for (int n = 2; n * n <= i; n++)
        {
            if (i % n == 0)
            {
                isPrime = false;
                break; 
            }
        }   
        // 只有通过所有检测的数才是质数,输出该数
        if (isPrime) {
            cout << i << endl;
        }
    }

    return 0;
}

修正说明

  1. 质数判断逻辑修正:新增isPrime布尔标记,初始设为true,内层循环仅负责检测i是否存在因数,一旦找到因数就标记为非质数并跳出循环,循环结束后根据标记决定是否输出i。
  2. 边界处理:添加a < 2的判断,将起始数修正为2,避免对1及负数的无效检测。
  3. 性能优化:内层循环终止条件改为n * n <= i,利用数学原理减少循环次数,提升检测效率。
  4. 冗余代码清理:移除无用的全局变量n,避免变量作用域冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:55:08