Cod sursa(job #1548235)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 10 decembrie 2015 17:50:29
Problema Suma divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <cstdlib>
#define MAXN 5000
#define MOD 9901
inline long long put(long long a,long long b) {
    long long prod=1;
    while(b){
        if(b%2)
           prod=(prod*a)%MOD;
        b/=2;
        a=(a*a)%MOD;
    }
    return prod;
}
int main(){
    FILE*fi,*fout;
    long long prod,e,d,a,b;
    fi=fopen("sumdiv.in" ,"r");
    fout=fopen("sumdiv.out" ,"w");
    fscanf(fi,"%lld%lld" ,&a,&b);
    prod=1;
    d=2;
    while(d*d<=a){
        e=0;
        while(a%d==0){
            a/=d;
            e++;
        }
        prod=(prod*((put(d,b*e+1)-1)*put(d-1,MOD-2)))%MOD;
        d++;
    }
    if(a>1)
        prod=(prod*(put(a,b+1)-1)*put(a-1,MOD-2))%MOD;
    fprintf(fout,"%lld" ,prod);
    fclose(fi);
    fclose(fout);
    return 0;
}