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

统计完全数的C++程序始终输出0,请求问题排查与修复

问题修复:完全数统计程序输出0的问题

你的程序始终输出0的核心原因是内层循环的终止条件错误:你用了输入的数字总数n的一半(j <= n/2),而不是当前要检测的数字k的一半。真因数的范围是1到k/2(大于k/2的数不可能是k的真因数,除了k本身),用n的一半会导致真因数之和计算完全错误,永远无法等于k。

修复后的代码

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

int main()
{
    int n, k, count = 0;

    cin >> n;

    for (int i = 0; i < n; i++){
        cin >> k;
        int sum = 0;

        // 修正:循环到当前检测数字k的一半,而非数字总数n的一半
        for (int j = 1; j <= k / 2; j++) {
            if (k % j == 0) {
                sum += j;
            }
        }
        if (k == sum){
            count++;
        }
    }
    cout << count;

    return 0;
}

额外优化建议

  • 变量命名语义化:用count代替l、sum代替m,提升代码可读性。
  • 优化计算效率:循环到sqrt(k),找到因数j时同时添加k/j(需排除k本身和重复因数),减少循环次数:
int sum = 1; // 1是所有大于1的数的真因数
if (k == 1) sum = 0; // 1没有真因数
for (int j = 2; j <= sqrt(k); j++) {
    if (k % j == 0) {
        sum += j;
        int other = k / j;
        if (other != j && other != k) { // 避免重复添加和添加k本身
            sum += other;
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:30:45