我有一个 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,它不会快速响应。
那么,有没有更好的方法来为过长的值找到一个完美的数字?或者有什么更好的算法可以在这里实现???:)