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

C++程序问题:输入数字找其后前两个质数却判错,求原因

代码错误原因分析

你的代码存在以下几个关键问题,导致不符合任务要求:

1. 输入范围限制错误

任务要求接收任意输入数字,但你的main函数里判断条件是number > 3,这会直接拒绝输入≤3的合法情况(比如输入1、2、3),不符合需求。

2. 未排除输入数字本身

任务要求找该数字之后的前两个质数,即必须大于输入数字的质数,但你的代码会先检查输入数字是否为质数,如果是就直接输出(比如输入5,会先输出5,再输出7),这违反了“之后”的要求。正确逻辑应该从number + 1开始检查。

3. isPrime函数的边界判断错误

  • 当传入value=1时,循环不会执行,函数返回true,但1不是质数;
  • 当传入负数或0时,函数同样会错误返回true,这些情况都没有被正确处理。

修正后的示例代码

#include <iostream>
#include <cmath>

// 判断是否为质数
bool isPrime(int value) {
    if (value <= 1) return false;
    if (value == 2) return true;
    if (value % 2 == 0) return false;
    // 仅检查到平方根,同时只遍历奇数,提升效率
    for (int i = 3; i <= sqrt(value); i += 2) {
        if (value % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int number;
    if (!(std::cin >> number)) {
        std::cout << "输入无效\n";
        return 1;
    }

    int primeCounter = 0;
    int current = number + 1; // 从输入数字的下一个数开始查找
    while (primeCounter < 2) {
        if (isPrime(current)) {
            std::cout << current << '\n';
            primeCounter++;
        }
        current++;
    }

    return 0;
}

修正说明

  • 移除了输入范围限制,支持所有合法整数输入;
  • 从number + 1开始查找质数,确保是输入数字“之后”的数;
  • 修复了isPrime函数的边界判断,正确处理≤1的非质数,同时优化了判断逻辑提升效率;
  • 增加了输入有效性判断,处理非数字输入的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:15:09