算到根號n即可。
根號n一次,其他相對應的兩次。
sub = n - sum;放在if外面可以快0.004秒耶 -_-a
/* ACM 382 Perfection
* mythnc
* 2012/03/31 21:38:57
* run time: 0.004
*/
#include <stdio.h>
typedef enum {PERFECT, ABUNDANT, DEFICIENT} number;
number sumfactor(int);
int main(void)
{
int n;
char *num[3] = {"PERFECT", "ABUNDANT", "DEFICIENT"};
printf("PERFECTION OUTPUT\n");
while (scanf("%d", &n) && n != 0)
printf("%5d %s\n", n, num[sumfactor(n)]);
printf("END OF OUTPUT\n");
return 0;
}
/* sumfactor: sum the factor of n,
* and return correspond symbol
* of n - sum */
number sumfactor(int n)
{
int i, sum, sub;
if (n == 1)
return DEFICIENT;
for (sum = 1, i = 2; i * i <= n; i++)
if (n % i == 0) {
sum += i;
if (n / i != i)
sum += n / i;
}
sub = n - sum;
if (sub > 0)
return DEFICIENT;
else if (sub == 0)
return PERFECT;
else
return ABUNDANT;
}
沒有留言:
張貼留言