Pagini recente » Cod sursa (job #931744) | Cod sursa (job #256626) | Cod sursa (job #2824499) | Cod sursa (job #2692980) | Cod sursa (job #1915706)
#include <cstdio>
const int MOD = 9901;
int LgPut(int X, int B)
{
int A = 1;
while(B)
{
if(B%2) A=(1LL*A*X)%MOD;
X=(1LL*X*X)%MOD;
B/=2;
}
return A;
}
int Compute(int A, int B)
{
if(!B) return 1;
if(B % 2 == 0) return (1LL * Compute(A,B-1) * A + 1) % MOD;
return (Compute(A,B/2) * (1 + LgPut(A,B/2+1))) % MOD;
}
int main(){
FILE* fin = fopen("sumdiv.in","r");
FILE* fout = fopen("sumdiv.out","w");
int i,A,B,res=1,nr=0;
fscanf(fin,"%d %d",&A,&B);
if(!A) { fprintf(fout,"0\n"); return 0; }
for(i = 2; i * i <= A; ++i)
if(A % i == 0){
nr = 0;
while(A % i == 0) { A /= i; ++nr; }
res = (res * Compute(i,nr*B)) % MOD;
}
printf("%d\n",A);
if(A > 1) res = (res * Compute(A,B)) % MOD;
fprintf(fout,"%d\n",res);
fclose(fin);
fclose(fout);
return 0;
}