求指定数量素数的C++程序无输出问题排查求助
问题排查与修复方案
嘿,我一眼就揪出了导致程序无输出的核心问题,咱们一步步来解决:
1. 致命错误:循环条件写反了
你看这段循环代码:
while (n < count) { // 找素数的逻辑 }
初始时count是0,而你输入的n是要找的素数数量(肯定是正整数),所以n < count从一开始就不成立,循环直接跳过了!primes向量完全是空的,后面的输出循环自然啥也打不出来。
修正方法:把循环条件改成count < n,这样当找到的素数数量还没达到你要求的n时,才会继续执行循环找下一个数:
while (count < n) { if (is_prime(i)) { primes.push_back(i); count++; } i++; }
2. 容易忽略的小问题:缺少必要头文件
你代码里用了cout和cin,但没包含<iostream>头文件!虽然有些编译器可能会间接包含这个头文件,但这是不规范的,加上它才能保证程序在所有环境下正常编译运行。
可选优化:提升素数判断效率
你的is_prime函数逻辑是对的,但可以优化一下——不需要遍历到a-1,只需要遍历到sqrt(a)就够了。因为如果a有一个大于sqrt(a)的因子,那对应的另一个因子肯定小于sqrt(a),这样能减少循环次数,提升效率。修改后的is_prime函数:
bool is_prime(int a) { if (a <= 1) return false; else if (a == 2) return true; int sqrt_a = sqrt(a); for (int i = 2; i <= sqrt_a; i++) { if (a % i == 0) return false; } return true; }
修正后的完整代码
#include<cmath> #include<iostream> // 补上必要的头文件 #include<cstdlib> #include<string> #include<list> #include <forward_list> #include<vector> #include<unordered_map> #include<algorithm> #include <array> #include <regex> #include<random> #include<stdexcept> using namespace std; bool is_prime(int a); int main() { cout<<"Give me the number of primes you want: \n"; int n; cin>>n; vector<int> primes; int i = 2; int count = 0; // 修正循环条件 while (count < n) { if (is_prime(i)) { primes.push_back(i); count++; } i++; } for (int i = 0; i < primes.size(); i++) cout<<"Prime number: "<< i + 1 << "\t"<< primes[i] <<endl; } bool is_prime(int a) { if (a <= 1) return false; else if (a == 2) return true; int sqrt_a = sqrt(a); for (int i = 2; i <= sqrt_a; i++) { if (a % i == 0) return false; } return true; }
现在运行程序,输入你想要的素数数量,就能正常输出结果啦!
内容的提问来源于stack exchange,提问作者jack.b




