Cod sursa(job #1505993)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 19 octombrie 2015 22:13:25
Problema Suma divizorilor Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#define MOD 9901
inline int lgput(int a, int n){
    int r=1;
    while(n>0){
        if(n%2==1){
            r=(r*a)%MOD;
        }
        n/=2;
        a=(a*a)%MOD;
    }
    return r;
}
inline int suma(int x, int y){
    int a=y/(MOD-1), b=y%(MOD-1), rasp=1, e=1, sum=1;
    for(int i=1; i<MOD; i++){
        e=(e*(long long)x)%MOD;
        sum=(sum+e)%MOD;
        if(i==b){
            rasp=sum;
        }
    }
    rasp=(rasp*(long long)lgput(sum, a))%MOD;
    return rasp;
}
int main(){
    int a, b, ans, p, s;
    FILE *fin, *fout;
    fin=fopen("sumdiv.in", "r");
    fout=fopen("sumdiv.out", "w");
    fscanf(fin, "%d%d", &a, &b);
    ans=1;
    p=2;
    while(p*p<=a){
        if(a%p==0){
            a/=p;
            s=1;
            while(a%p==0){
                a/=p;
                s++;
            }
            ans=(suma(p, s*b)*ans)%MOD;
        }
        p++;
    }
    if(a>1){
        ans=(suma(a, b)*ans)%MOD;
    }
    fprintf(fout, "%d\n", ans);
    fclose(fin);
    fclose(fout);
    return 0;
}