Cod sursa(job #1900900)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 3 martie 2017 17:20:01
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#define MOD 9901
inline int lgput(long long a,long long b){
   long long ans=1;
   a%=MOD;
   while(b){
      if(b&1)
        ans=(ans*a)%MOD;
      b>>=1;
      a=(a*a)%MOD;
   }
   return ans;
}
int main(){
    FILE*fi,*fout;
    int a,div,ans;
    long long b;
    fi=fopen("sumdiv.in" ,"r");
    fout=fopen("sumdiv.out" ,"w");
    fscanf(fi,"%d %lld " ,&a,&b);
    div=2;
    ans=1;
    while(div*div<=a){
        int exp=0;
        while(a%div==0){
          a/=div;
          exp++;
        }
        if(exp>0){
           long long x=b*exp;
           ans=(ans*(((lgput(div,x+1)-1+MOD)*lgput(div-1,MOD-2))%MOD))%MOD;
        }
        div++;
    }
    if(a>1){
        int exp=1;
        long long x=b*exp;
        div=a;
        ans=(ans*(((lgput(div,x+1)-1+MOD)*lgput(div-1,MOD-2))%MOD))%MOD;
    }
    if(b==0)
      ans=1;
    if(a==0)
      ans=0;
    fprintf(fout,"%d" ,ans);
    fclose(fi);
    fclose(fout);
    return 0;
}