【发布时间】:2017-06-20 16:41:09
【问题描述】:
我有一个 C 代码可以在下面找到大的完美数,
#include <stdio.h>
int main ()
{
unsigned long long num,i,sum;
while (scanf ("%llu",&num) != EOF && num)
{
sum = 1;
for (i=2; i*i<=num; i++)
{
if (num % i == 0)
{
if (i*i == num)
sum += i;
else
sum += (i + num/i);
}
}
if (sum == num)
printf ("Perfect\n");
else if (sum > num)
printf ("Abundant\n");
else
printf ("Deficient\n");
}
return 0;
}
我试图找出一个数字是完美的、丰富的还是不足的。我运行一个循环到num 的平方根以最小化运行时间。它工作正常<= 10^15,但对于较大的值,执行时间太长。
例如,对于以下输入集,
8
6
18
1000000
1000000000000000
0
此代码显示以下输出,
Deficient
Perfect
Abundant
Abundant
Abundant
但是,对于 10^16,它并没有快速响应。
那么,有没有更好的方法来为过长的值找到一个完美的数字?或者有什么更好的算法可以在这里实现??? :)
【问题讨论】:
标签: math number-theory perfect-numbers