Pagini recente » Cod sursa (job #569043) | Cod sursa (job #2038697) | Cod sursa (job #2945638) | Cod sursa (job #907284) | Cod sursa (job #494442)
Cod sursa(job #494442)
#include<cstdio>
const int MOD=9901;
int q,nr[1<<17],put[1<<17];
int lgput(int n,int p)
{
int pp,a;
pp=1;
a=n;
while(p)
{
if(p&1)
{
pp*=a;
pp%=MOD;
}
a*=a;
a%=MOD;
p>>=1;
}
return pp;
}
void eucl(int a,int b,int &x,int &y,int &d)
{
if(b==0)
{
x=1;
y=0;
d=a;
return ;
}
int x1,y1;
eucl(b,a%b,x1,y1,d);
x=y1;
y=x1-(a/b)*y1;
}
int inversmod(int A)
{
int x,y,d;
x=y=d=0;
eucl(A,MOD,x,y,d);
if(x>0)
return (x%MOD);
else return (MOD+x%MOD);
return 0;
}
void desc(int x)
{
for(int i=2;i*i<=x;i++)
if(x%i==0)
{
int p=0;
while(x%i==0)
p++,x/=i;
++q;
nr[q]=i;
put[q]=p;
}
if(x>1)
{
++q;
nr[q]=x;
put[q]=1;
}
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
int a,b;
scanf("%d%d",&a,&b);
desc(a);
for(int i=1;i<=q;i++)
put[i]*=b;
int nrd=1;
for(int i=1;i<=q;i++)
{
nrd*=(((lgput(nr[i],put[i]+1)-1)%MOD)*inversmod(nr[i]%MOD-1))%MOD;
nrd%=MOD;
}
printf("%d",nrd);
return 0;
}