我有一個C代碼關閉下面發現大量完美的數字,如何在C中找到完美的數字10^18?
#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不會迅速作出反應。
那麼,有沒有更好的方法來找到一個值太長的完美數字?或者有沒有更好的算法來實現這裏? :)
這有幫助。 :) ...感謝分享你的知識:) –