分析
这一题目主要考查的是循坏结构,因此,其实不用加太多的优化也可以A了这一道题
我们只要慢慢的将所有的约数全部加起来再判断即可
详见代码:
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;//此题开long long 也可以过滴
int main()
{
ull n;
cin>>n;
ull a[n+100];
for(ull i=1;i<=n;i++)
{
ull sum=1;
cin>>a[i];
for(ull j=2;j<=sqrt(a[i]);j++)//我们可以这样理解:若a是n的约数,那么(n/a)也一定是n的约数,因此我们的循环只要到sqra(a[i])即可,因此下面的第二个if语句需要将j和a[i]/j都加上
{
if(a[i]%j==0&&(a[i]/j)!=j)sum+=j,sum+=(a[i]/j);//若j刚好是a[i]的平方根,则只需加一次
else if(a[i]%j==0&&(a[i]/j)==j)sum+=j;//否则需要将j和a[i]/j都加上
}
if(sum==a[i]&&a[i]!=1)cout<<a[i]<<" is perfect\n";
else cout<<a[i]<<" is not perfect\n";//判断并输出
}
return 0;
}