AcWing 725. 完全数
原题链接
中等
作者:
havefunHJN
,
2021-05-20 12:34:28
,
所有人可见
,
阅读 242
C++ 代码
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
//一共n组数据
int a;
scanf("%d", &a);
//n组数据,循环n次
while(a--){
int n;
cin >> n;
int sum = 0;
//首先是i的初始值,不能为0,应该为1,因为1是第一个正确答案
//至于i * i <= n,这是因为咱们需要对速度进行优化,不能i <= n
//比如20,答案就是1和20,2和10,4和5。
//算出一个4就能直接的得出5,再往下算,得出5和4,就重复了,i到大概4.5就不需要往下算了
for(int i = 1; i * i <= n; i++){
if (n % i == 0) {
if (i < n) sum += i;
if(n/i < n && n/i != i) sum += n/i;
}
}
if (sum == n) printf("%d is perfect\n", n);
else printf("%d is not perfect\n", n);
}
return 0;
}