Cod sursa(job #1484013)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 10 septembrie 2015 12:52:12
Problema Suma divizorilor Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<stdio.h>
int a,b,s,p,i;
int A(int a,int n) {
    if(!n)
        return 1;
    int x=A(a,n>>1);
    x=(x*x)%9901;
    if(n&1)
        x=(x*a)%9901;
    return x;
}
int C(int a) {
    int r;
    if(!a)
        return 0;
    for(r=1;r%a;r+=9901);
    return r/a;
}
int B(int q,int e) { return q==1?(e+1)%9901:(((A(q,e+1)+9900)%9901)*C((q+9900)%9901))%9901; }
int main() {
    freopen("sumdiv.in","r",stdin),freopen("sumdiv.out","w",stdout),scanf("%d%d",&a,&b);
    for(;!(a&1);p++,a>>=1);
    for(s=B(2,p*b),i=3;i*i<=a;i+=2)
    if(!(a%i)) {
        for(p=0;!(a%i);p++,a/=i);
        s=(s*B(i%9901,p*b))%9901;
    }
    if(a>1)
        s=(s*B(a%9901,b))%9901;
    printf("%d",s);
}