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

C++实现求数字因数:先打印因数总数再输出所有因数的问题

问题分析

现有代码的核心问题是遍历过程中边找因数边输出计数和单个因数,不符合输出规则中「先输出总个数,再输出全部因数」的要求,需要先把所有找到的因数存储下来,遍历结束后再按要求顺序输出。


两种调整方案

方案1:保留原有遍历逻辑(适合初学者理解)

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    int count = 0;
    vector<int> factors;
    for(int i = 1; i <= n; i++){
        if(n % i == 0){
            count++;
            factors.push_back(i);
        }
    }
    // 按要求顺序输出
    cout << count << endl;
    for(int i = 0; i < factors.size(); i++){
        if(i > 0) cout << " ";
        cout << factors[i];
    }
    cout << endl;
    return 0;
}

方案2:优化遍历范围(运行效率更高,适合上限1e6的场景)

遍历范围缩小到sqrt(n),每次找到因数i的同时存入对应的n/i,最后排序即可,时间复杂度从O(n)降到O(√n):

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin >> n;
    vector<int> factors;
    for(int i = 1; i * i <= n; i++){
        if(n % i == 0){
            factors.push_back(i);
            if(i != n / i){
                factors.push_back(n / i);
            }
        }
    }
    sort(factors.begin(), factors.end());
    // 按要求顺序输出
    cout << factors.size() << endl;
    for(int i = 0; i < factors.size(); i++){
        if(i > 0) cout << " ";
        cout << factors[i];
    }
    cout << endl;
    return 0;
}

调整说明

  • 新增vector容器存储所有找到的因数,遍历过程中只做计数和存储,不输出
  • 遍历结束后先输出因数总个数,再按顺序输出所有因数,符合输出规则要求
  • 方案2做了效率优化,就算n取上限1e6也仅需要遍历1000次,运行速度远高于原写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:57:03