2301_79272901 2024-11-09 13:37 采纳率: 100%
浏览 92
已结题

C++.求完全数的个数

问题描述
一个正整数若等于全部因子的和,则称此数为完全数。例如:
6 有因子 1,2,3 。
同时 6=1+2+3 ,所以 6 是完全数。
输入
一个正整数
输出
小于等于N 的完全数的个数



  • 写回答

1条回答 默认 最新

  • 无疆76 2024-11-09 13:38
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    以下是使用 C++ 实现求完全数的个数的代码:

    #include <iostream>
    using namespace std;
    
    int countPerfectNumbers(int n) {
        int count = 0;  // 完全数的计数器
        for (int i = 1; i <= n; ++i) {  // 遍历从 1 到 n 的所有数
            int sum = 1;  // 当前数的因子之和初始化为 1,因为每个数都能被 1 整除
            for (int j = 2; j <= i / 2; ++j) {  // 寻找 i 的因子,只需要遍历到 i/2 即可
                if (i % j == 0) {  // 如果 j 是 i 的因子
                    sum += j;  // 将因子加到因子和中
                    if (j != i / j) {  // 避免将因子和其对应的商重复计算,例如计算 28 的因子时,会同时计算到 4 和 7,只需计算其中一个即可
                        sum += i / j;  // 将因子对应的商加到因子和中
                    }
                }
            }
            if (sum == i) {  // 如果因子之和等于当前数,说明是完全数
                count++;  // 完全数计数器加 1
            }
        }
        return count;  // 返回完全数的个数
    }
    
    int main() {
        int n;  // 输入的正整数
        cout << "请输入一个正整数:";
        cin >> n;  // 输入正整数 n
        cout << "小于等于 " << n << " 的完全数的个数为:" << countPerfectNumbers(n) << endl;  // 输出完全数的个数
        return 0;
    }
    

    解释:该程序首先定义了一个函数 countPerfectNumbers 来计算小于等于给定正整数 n 的完全数的个数。在主函数中,首先读取用户输入的正整数 n,然后调用 countPerfectNumbers 函数计算完全数的个数并输出结果。在 countPerfectNumbers 函数中,通过两层循环遍历从 1 到 n 的所有数,并判断每个数是否为完全数。判断完全数的方法是计算该数的所有因子的和,如果和等于该数本身,则说明是完全数。计数器的值即为完全数的个数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 创建了问题 11月9日