C++ 完美数求解算法
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int num = 2; num <= n; num++) {
int sum = 1; // 1 必定是所有正整数的因子
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
sum += i;
if (num / i != i) {
sum += num / i;
}
}
}
if (sum == num) {
cout << num << endl;
}
}
return 0;
}
程序解析:
- 输入 n: 程序首先接收用户输入的正整数 n,代表求解范围的上限。
- 循环遍历: 使用
for循环遍历 2 到 n 之间的每个整数num。 - 计算因子之和: 对于每个
num,程序使用另一个for循环来计算其所有因子的和,并存储在sum变量中。 - 判断完美数: 如果
sum等于num,则说明num是完美数,程序将其输出到控制台。 - 优化因子计算: 为了提高效率,程序在计算因子时只遍历到
i * i <= num,因为如果i是num的因子,那么num / i也是num的因子,且只需要计算其中较小的那个。
示例:
输入:
7
输出:
6
程序的功能是找到 2 到 n 之间的完美数,并按从小到大顺序输出。
原文地址: https://www.cveoy.top/t/topic/qBkm 著作权归作者所有。请勿转载和采集!