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

C++实现素数逗号分隔输出:如何去除末尾多余逗号?

解决C++素数输出末尾多余逗号的问题

你的代码已经能正确输出n以内的素数,但每个素数后都直接追加逗号,导致最后一个素数后面多了个不必要的逗号。这里提供几种简单的修复方案,顺便优化下素数判断的效率:

方案一:用标志位控制逗号输出

核心思路是:第一个素数直接输出,后续的素数先输出逗号再输出数字,避免末尾出现逗号。同时优化素数判断逻辑,提升效率:

#include <iostream>
using namespace std;

// 优化后的素数判断函数,返回bool值更直观
bool isPrime(int num) {
    if (num < 2) return false;
    // 只需遍历到sqrt(num),减少循环次数
    for(int i = 2; i * i <= num; i++) {
        if(num % i == 0)
            return false;
    }
    return true;
}

int main(int argc, const char * argv[]) {
    int n;
    cin >> n;
    bool isFirst = true; // 标记是否是第一个素数
    for(int i = 2; i <= n; i++) {
        if(isPrime(i)) {
            if(!isFirst) {
                // 非第一个素数,先输出逗号分隔符
                cout << ", ";
            }
            cout << i;
            isFirst = false; // 输出第一个素数后,标记改为false
        }
    }
    cout << endl;
    return 0;
}

方案二:先收集所有素数再统一输出

先把找到的素数存到容器里,再遍历容器输出,只对非最后一个素数添加逗号:

#include <iostream>
#include <vector>
using namespace std;

bool isPrime(int num) {
    if (num < 2) return false;
    for(int i = 2; i * i <= num; i++) {
        if(num % i == 0)
            return false;
    }
    return true;
}

int main(int argc, const char * argv[]) {
    int n;
    cin >> n;
    vector<int> primes;
    // 先收集所有素数
    for(int i = 2; i <= n; i++) {
        if(isPrime(i)) {
            primes.push_back(i);
        }
    }
    // 遍历输出,控制逗号
    for(size_t i = 0; i < primes.size(); i++) {
        cout << primes[i];
        if(i != primes.size() - 1) {
            cout << ", ";
        }
    }
    cout << endl;
    return 0;
}

补充说明

原代码里的check函数有两个可以优化的点:

  • 参数ra完全没用到,可以直接删除;
  • 素数判断时循环从1到a效率太低,实际上只要判断到sqrt(a)就足够,因为如果a有大于sqrt(a)的因数,对应的另一个因数必然小于sqrt(a)。

内容的提问来源于stack exchange,提问作者Komil Rajabov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:15:34