算到根號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; }
沒有留言:
張貼留言