725. 完全数
作者:
dabaodabao
,
2024-03-22 21:13:52
,
所有人可见
,
阅读 6
- 我TLE,学了一种新的方法,能减少循环次数:j*j<=x。
- 1不是完全数,需要特判,但我没想到。
- 优化减少循环次数后,只加了部分约数,与之对应的约数忘加了x/j。
- 有一点需要注意,题目要求不能把数本身作为约数加上,所以需要判断一下if((x/j)!=x)。
#include<iostream>
using namespace std;
int main()
{
//freopen("xxx.in","r",stdin);
//freopen("yyy.out","w",stdout);
int n;
int x;
int he=0;
cin >> n;
for(int i=0;i<n;i++)
{
he=0;
cin >> x;
if(x!=1)
{
for(int j=1;j*j<=x;j++)
{
if(x%j==0)
{
he+=j;
if((x/j)!=x)
{
he+=x/j;
}
}
}
if(he==x)
{
cout << x << " is perfect" << endl;
}
else
{
cout << x << " is not perfect" << endl;
}
}
else
{
cout << x << " is not perfect" << endl;
}
}
//fclose(stdin);
//fclose(stdout);
return 0;
}