poj 2480 Longge's problem

poj 2480 Longge's problem_第1张图片

#include
typedef long long ll ;
ll quick_pow(ll n , ll k){
    ll ans = 1;
    while(k){
        if(k&1)
        ans *= n;
        n*=n;
        k>>=1;
    }
    return ans ;
}
void f(ll &n){
    ll ans = 1 ;
    for(ll i=2; i*i<=n; ++i){
        ll cnt = 0;
        if(n%i==0){
            while(n%i==0){
                cnt++;
                n/=i;
            }
            ll tmp = quick_pow(i,cnt) ;
        //  printf("%lld\n",((cnt)*(tmp-tmp/i)+tmp)) ;
            ans*=((cnt)*(tmp-tmp/i)+tmp) ;
            //prin((cnt)*(tmp-tmp/i)+tmp) ;
        }
    }
    if(n!=1){                   // big prime factor
        //printf("%lld\n",ans) ;
        ans*=(n*2-1) ;
    }
    printf("%lld\n",ans) ;
}
int main(){
    ll n ;
    while(~scanf("%lld",&n)){
        f(n) ;      
    }
    return 0 ;
} 

你可能感兴趣的:(ACM-数学)