HDU1323 Perfection

原题传送

题目的意思是比较一个数与它的因子和,若相等为perfect;若这个数小于它的因子和为abundant;若这个数小于它的因子和为deficient

我们知道,如果一个数m=i*j(i != m && j != m)那么,i,j都为它的因子。因此,我们可以利用这制作循环把2-60000所有数的因子和求出,然后进行判断。

附代码:

#include 
int main(void) {
    int i, j;
    int A[60005];
    for(i = 2;i < 60000;i++)
        A[i] = 1;
    for(i = 2;i < 245;i++) { //i * i <= 60000时退出循环,简化后i < 245
        A[i * i] += i;   //i * i的其中一个因子为i
        for(j = i + 1;i * j < 60001;j++)
            A[i * j] += i + j;   //i * j的其中两个因子为i和j
    }
    puts("PERFECTION OUTPUT");
    while(scanf("%d", &i), i)
        printf("%5d  %s\n", i, i < A[i] ? "ABUNDANT" : i > A[i] ? "DEFICIENT" : "PERFECT");
    puts("END OF OUTPUT");
    return 0;
}



你可能感兴趣的:(HDU)