#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int n,m,sum=0;
cin>>m;
while(m--)
{
cin>>n;
sum=0;
for(int i=1;i<=sqrt(n);i++)
{
if(n%i==0)
{
if(i<n)sum+=i;#如果i<n,直接加
if(i!=n/i&&n/i<n)sum+=n/i;#如果是平方数,比如说是36,只需要算一次6.
}
}
if(sum==n)
cout << n<<" is perfect"<<endl;
else
cout<<n<<" is not perfect"<<endl;
}
return 0;
}
直接暴力会超时,需要优化,直接利用较小的约数求出较大的约数。