要点:
i是x的约数, 则 x/i 也一定是x的约数。i <= x/i >> i <= sqrt(x) ;
注意点:
i = x/i ;
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
while (n--)
{
int x, sum =0;
cin >> x;
for (int i = 1; i*i <= x; i++)
{
if (x % i == 0)
{
if (i < x)
sum += i;
if (x/i < x && x/i != i) // 1、这里排除数字本身。2、 避免重复: 如:2*2
sum += x/i;
}
}
if (sum == x) printf("%d is perfect\n", x);
else printf("%d is not perfect\n", x);
}
return 0;
}