Pagini recente » Cod sursa (job #218919) | Cod sursa (job #2872192) | Cod sursa (job #66503) | Cod sursa (job #1403421) | Cod sursa (job #183000)
Cod sursa(job #183000)
#include<cstdio>
const int mod=9901;
int inv[9901],i,j,x,y,a,b,ciur[8000],prime[8000];
long long n;
void invers(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
}
else
{
int x0,y0;
invers(b,a%b,x0,y0);
x=y0;
y=x0-(a/b)*y0;
}
}
int pow(int a,int b)
{
if(b==1)
return a;
int x=pow(a,b>>1);
x=(x*x)%mod;
if(b&1) x=(x*a)%mod;
return x;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
inv[1]=1;
for(i=2;i<mod;i++)
if(!inv[i])
{
invers(i,mod,x,y);
if(x<0) x=x+mod;
x=x%mod;
inv[i]=x;
inv[x]=i;
}
for(i=2;i<8000;i++)
if(ciur[i]==0)
for(j=2*i;j<8000;j+=i)
ciur[j]=1;
for(i=2;i<8000;i++)
if(ciur[i]==0) prime[++prime[0]]=i;
scanf("%d %d",&a,&b);
if(a!=1 && b)
{
i=1;
n=1;
while(prime[i]*prime[i]<=a && n)
{
x=0;
while(a%prime[i]==0)
a/=prime[i],x++;
if(x)
{
y=pow(prime[i],x*b+1);
if(!y) y=mod;
n=(n*(y-1)*inv[(prime[i]-1)%mod])%mod;
}
i++;
}
if(a!=1 && n)
{
if(a%mod!=1)
y=pow(a%mod,b+1);
else
y=(b+1)%mod;
if(!y) y=mod;
if(a%mod!=1)
n=(n*(y-1)*inv[(a-1)%mod])%mod;
else
n=(n*(y-1))%mod;
}
}
else
n=1;
printf("%lld\n",n);
fclose(stdout);
return 0;
}