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
相关产品推荐
相关产品推荐

