Cod sursa(job #198114)
#include<stdio.h>
long long a,b,x,nr[1000],ap[1000],sol,ax;
long long put(long long m,long long n){
long long t=1;
for(;n;n>>=1){
if(n&1)
t=(t*m)%9901;
m=(m*m)%9901;
}
return t;
}
int main(){
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%lld%lld",&a,&b);
int i;
for(i=2;i*i<=a;++i){
if(!(a%i)){
nr[++x]=i;
while(a%i==0){
a/=i;
++ap[x];
}
}
}
if(a>1){
nr[++x]=a;
ap[x]=1;
}
sol=1;
for(i=1;i<=x;++i){
ap[i]*=b;
if(nr[i]%9901==1)
ax=ap[i]+1;
else{
ax=(put(nr[i],ap[i])*nr[i]+9900)%9901;
ax=(put(nr[i]-1,9899)*ax)%9901;
}
sol=(sol*ax)%9901;
}
printf("%lld\n",sol);
fclose(stdin);
fclose(stdout);
return 0;
}