Pagini recente » Cod sursa (job #66645) | Cod sursa (job #526621) | Cod sursa (job #318528) | Cod sursa (job #2050090) | Cod sursa (job #1162328)
#include <cstdio>
#define MOD 9901
using namespace std;
bool ciur[7115];
int prim[1000],fact[1000],exp[1000],len;
inline void Ciur()
{
int i,j;
for(i=3;i<=85;i+=2)
if(!ciur[i])
for(j=i*i;j<=7100;j+=2*i)
ciur[j]=true;
prim[++prim[0]]=2;
for(i=3;i<7100;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)
{
++len;
fact[len]=x; exp[len]=1;
}
}
inline int Pow_Log(int x, int p)
{
int put=1;
while(p)
{
if(p&1)
{
put=(put*x)%MOD;
--p;
}
p>>=1;
x=(x*x)%MOD;
}
return put;
}
int main()
{
int a,b,sol=1,i;
freopen ("sumdiv.in","r",stdin);
freopen ("sumdiv.out","w",stdout);
scanf("%d%d", &a,&b);
Ciur();
Descomp(a);
for(i=1;i<=len;++i)
exp[i]*=b;
for(i=1;i<=len;++i)
sol=(sol*(Pow_Log(fact[i],exp[i]+1)-1)*Pow_Log(fact[i]-1,MOD-2))%MOD;
printf("%d\n", sol);
return 0;
}