Cod sursa(job #1705460)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 20 mai 2016 17:18:30
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#define MOD 9901
inline int suma(int x, int y){
    int a=(y+1)/(MOD-1), b=(y+1)%(MOD-1), rasp=0, e=1, sum=1;
    for(int i=1; i<=MOD-2; i++){
        if(b==i){
            rasp=sum;
        }
        e=(e*(long long)x)%MOD;
        sum=(sum+e)%MOD;
    }
    rasp=(rasp+sum*(long long)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;
}