Cod sursa(job #1736410)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 1 august 2016 17:55:31
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>
#define MOD 9901
using namespace std;
long long RaiseToPower(long long base,long long power){
    long long answer=1;
    while(power>0){
        if(power%2==1)
            answer=(answer*base)%MOD;
        base=(base*base)%MOD;
        power/=2;
    }
    return answer;
}
int main(){
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    long long a,b,i,power,answer=1;
    scanf("%lld%lld",&a,&b);
    for(i=2;i*i<=a;i++)
        if(a%i==0){
            power=0;
            while(a%i==0){
                a/=i;
                power++;
            }
            answer=((answer*(RaiseToPower(i,b*power+1)-1))%MOD+MOD)%MOD;
            answer=(answer*RaiseToPower(i-1,MOD-2))%MOD;
        }
    if(a!=1)
        if(a%MOD==1)
            answer=(answer*(b+1))%MOD;
        else{
            answer=((answer*(RaiseToPower(a,b+1)-1))%MOD+MOD)%MOD;
            answer=(answer*RaiseToPower(a-1,MOD-2))%MOD;
        }
    printf("%lld",answer);
    return 0;
}