Pagini recente » Cod sursa (job #349906) | Cod sursa (job #2510508) | Cod sursa (job #333916) | Cod sursa (job #1415504) | Cod sursa (job #198082)
Cod sursa(job #198082)
#include <cstdio>
const int p=9901;
int pow(int a,int n){
int w;
if (n==0) return 1;
if (n==1) return a;
if (n&1) {w=pow(a,(n-1)>>1);
return (((w*w)%p)*a)%p;}
w=pow(a,n>>1);
return (w*w)%p;;
}
int inv(int a){
return pow(a%p,p-2);
}
bool prim(int a){
int d;
bool ok=true;
if (a==1) return false;
if (a==2) return true;
if (a%2==0) return false;
for (d=3;d*d<=a && ok;d+=2)
if (a%d==0) ok=false;
return ok;
}
int main(){
int d=2,w,r,a,b,s,sol=1,k;
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d %d",&a,&b);
w=a;
while (d*d<=a){
if (a%d==0){
k=0;
while (w%d==0) k++,w/=d;
k*=b;
if (d%p==1) s=(k+1)%p;
else{
s=pow(d%p,k+1);
s--;if (s==-1) s=p-1;
s=(s*inv(d-1))%p;
}
sol=(sol*s)%p;
r=a/d;
if (w%r==0)
if (prim(r)){
k=0;
while (w%r==0) k++,w/=r;
k*=b;
if (r%p==1) s=(k+1)%p;
else{
s=pow(r%p,k+1);
s--;if (s==-1) s=p-1;
s=(s*inv(r-1))%p;
}
sol=(sol*s)%p;}
}
d++;
}
printf("%d",sol);
return 0;
}