题目描述
要注意约数存在相同的情况,需要判断;
1不是完全数
用sqrt函数可以提高效率
样例
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
// 输入要判断的数字的个数
cin>>n;
for(int i=0;i<n;i++)
{
int x;
cin >> x;
int sum = 1; // 1不是完全数,先累加1
// 从2到x的平方根遍历找约数
for (int j = 2; j <= sqrt(x); j++) {
if (x%j==0)
{
sum+=j;
if(j!=x/j)//约数不相等!!!
{ sum+=x/j; }
}
}
if(sum==x&&x!=1)
cout<<x<<" is perfect"<<endl;
else
cout<<x<<" is not perfect"<<endl;
}
return 0;
}