求一个数因子个数和因子和(避免超时法)

求一个数的因子个数

int count(int n){
    int s=1;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            int a=0;
            while(n%i==0){
                n/=i;
                a++;
            }
            s=s*(a+1);
        }
    }
    if(n>1) s=s*2;
    return s;
}

 

求一个数的因子和

int sum(int n){
    int s=1;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){
            int a=1;
            while(n%i==0){
                n/=i;
                a*=i;
            }
            s=s*(a*i-1)/(i-1);
        }
    }
    if(n>1) s=s*(1+n);
    return s;
}

 


版权声明:本文为wcxyky原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。