You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求指定数量素数的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. 容易忽略的小问题:缺少必要头文件

你代码里用了coutcin,但没包含<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

火山引擎 最新活动