AcWing 725. 完全数
原题链接
简单
作者:
强者
,
2025-01-08 15:58:18
,
所有人可见
,
阅读 1
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N,M;
cin >> N;
for (int i = 1; i <= N; ++i) {
cin >> M;
int sum = 0;
/*
对于一个数 M,它的约数是小于等于 sqrt(M) 的数字,
因为任何大于 sqrt(M) 的因子必定有对应的小因子。
比如,如果 i 是 M 的因子,那么 M / i 也是 X 的因子
遍历 1 到 sqrt(M),每次找到一个因子 i,就同时考虑 i 和 M / i 两个因子
*/
for (int j = 1;j < sqrt(M);++j) {
if (M % j == 0) {
sum += j;
// 如果 i 和 M / i 不相等,且 M / i 不是 M 本身,加入到和中
if (j != 1 && j != M / j) {
sum += M / j;
}
}
}
if (sum == M) cout << M << " is perfect" << endl;
else cout << M << " is not perfect" << endl;
}
return 0;
}