POJ1528——因子和

因子和可以參考這裏,雖然這道題數據很弱,可以暴力過。但是可以用來練習。注意輸入爲1時的情況。

暴力法

#include <cstdio>

int proc(int n){
    int s = 1;
    for(int i=2;i<n;++i){
        if ( 0 == n % i ) s += i;
    }
    return s;
}

int main(){
    printf("PERFECTION OUTPUT\n");
    int n;
    while(scanf("%d",&n)&&n){
        printf("%5d  ",n);

        int s = proc(n);

        if( 1 == n || s < n ) printf("DEFICIENT\n");
        else if( s == n ) printf("PERFECT\n");
        else printf("ABUNDANT\n");
    }
    printf("END OF OUTPUT\n");
    return 0;
}

因子和公式

#include <cstdio>

int power(int a,int n){
    int r = 1;
    while(n){
        if ( n & 1 ) r *= a, --n;
        n>>= 1;
        a *= a;
    }
    return r;
}

int proc(int n){
    int nn = n;

    int s = 1;
    for(int i=2;i*i<=n;++i){
        if ( n % i ) continue;

        int k = 0;
        while( 0 == n % i ) n /= i, ++k;
        s *= ( power(i,k+1) - 1 ) / ( i - 1 );
    }

    if ( n != 1 ) s *= ( 1 + n );

    return s - nn;
}

int main(){
    printf("PERFECTION OUTPUT\n");
    int n;
    while(scanf("%d",&n)&&n){
        printf("%5d  ",n);

        int s = proc(n);

        if( 1 == n || s < n ) printf("DEFICIENT\n");
        else if( s == n ) printf("PERFECT\n");
        else printf("ABUNDANT\n");
    }
    printf("END OF OUTPUT\n");
    return 0;
}

還可以試試篩法求質數,再求質因子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章