#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
while (n--)
{
int x;
long long sum=1;
cin>>x;
for (int i = 2; i <= x/i;i++)
{
if (x % i == 0)
{
sum+=i;
sum+=x/i;
}
}
if (sum==x&&x!=1)
printf("%d is perfect\n",x);
else
printf("%d is not perfect\n",x);
}
return 0;
}
懂了
如果这个数能开平方,会多加一遍该数的平方根
为什么sum从1开始,为什么sum += n/i;
都是我不知的啊啊啊啊,来个大佬解释一下。
例如6 = 1 + 2 + 3 ,sum += n/i 就是好比 i = 2是6的一个约数,n / i = 3 就是另外一个,如果for循环写 i = 1, 那么n / i 会把本身加进去, 所以sum提前加了1, 另外如果循环写 i < x 就会超过数量级
牛,这各比较好理解
这个为啥不行
#include[HTML_REMOVED]
#include[HTML_REMOVED]
using namespace std;
int main()
{
int i,j,n,sum=0;
cin>>n;
int a[1000];
for(i=0;i[HTML_REMOVED]>a[i];
for(j=0;j<a[i];j++)
{
if(a[i]%j==0) sum+=a[i];
}
if(sum==a[i]) cout<<sum<<” is perfect”<<endl;
else
cout<<sum<<” is not perfect”<<endl;
}
能问一下,确定sum+=x/i这一条中x/i这个约数只有一个么?不会出现x/i然后这个x/i还能再除一个i么?
约数从小到大取,如果有x/i/i这个约数,会在x/i之前求出
嗯嗯 除了本身 懂了懂了 蟹蟹蟹蟹
为什么除了本身就是x!=1
x!=1,是为什么呀
sum+=x/i; 为什么要加这一句?
因为一个数的因子是成对存在的,所以循环只需遍历到x/i sum+=x/i,就是加上它的另一个因子;
好的 谢谢
学习了~~~ 我卡这里 老超时 谢谢
我也老是超时