Pagini recente » Cod sursa (job #521895) | Cod sursa (job #61382) | Cod sursa (job #843188) | Cod sursa (job #1472900) | Cod sursa (job #1162438)
#include <cstdio>
#define MOD 9901
using namespace std;
bool ciur[10005];
int prim[5000],fact[5000],exp[5000],len,sol=1,a,b;
inline void Ciur()
{
int i,j;
for(i=3;i<=100;i+=2)
if(!ciur[i])
for(j=i*i;j<=10000;j+=2*i)
ciur[j]=true;
prim[++prim[0]]=2;
for(i=3;i<=10000;i+=2)
if(!ciur[i])
prim[++prim[0]]=i;
}
inline void Descomp(int x)
{
int i,k;
for(i=1;i<=prim[0] && x>1 && prim[i]*prim[i]<=x;++i)
{
k=0;
while(x%prim[i]==0)
{
++k;
x/=prim[i];
}
if(k)
{
++len;
fact[len]=prim[i]; exp[len]=k;
}
}
if(x>1)
{
if(x%MOD==1)
sol=b+1;
else
{
++len;
fact[len]=x; exp[len]=1;
}
}
}
inline int Pow_Log(int x, int p)
{
int put=1;
x%=MOD;
while(p)
{
if(p&1)
{
put=(1LL*put*x)%MOD;
--p;
}
p>>=1;
x=(1LL*x*x)%MOD;
}
return put;
}
int main()
{
int i;
freopen ("sumdiv.in","r",stdin);
freopen ("sumdiv.out","w",stdout);
scanf("%d%d", &a,&b);
if(!a)
printf("0\n");
else
{
Ciur();
Descomp(a);
for(i=1;i<=len;++i)
exp[i]*=b;
for(i=1;i<=len;++i)
sol=(1LL*sol*(Pow_Log(fact[i],exp[i]+1)-1+MOD)*Pow_Log(fact[i]-1,MOD-2))%MOD;
printf("%d\n", sol);
}
return 0;
}