Cod sursa(job #756411)
#include <cstdio>
#include <vector>
#define Mod 9901
#define p first
#define e second
using namespace std;
int A, B, S;
vector < pair <int, int> > F;
inline int Pow (int X, int P)
{
int R=1; X%=Mod;
while (P)
{
if (P%2==0) X=(X*X)%Mod, P/=2;
else R=(R*X)%Mod, --P;
}
return R;
}
inline int MI (int X)
{
return Pow (X, Mod-2);
}
void Decompose ()
{
for (int i=2; i*i<=A and A>1; ++i)
{
if (A%i==0) F.push_back (make_pair (i, 0));
for (; A%i==0; A/=i, ++F.back ().e);
}
if (A>1) F.push_back (make_pair (A, 1));
for (unsigned i=0; i<F.size (); ++i) F[i].e*=B;
}
inline int ComputeF (int X, int P)
{
return (((Pow (X, P+1)-1+Mod)%Mod)*MI (X-1))%Mod;
}
void Solve ()
{
Decompose ();
S=1;
for (unsigned i=0; i<F.size (); ++i)
{
S=(S*ComputeF (F[i].p, F[i].e))%Mod;
}
}
void Read ()
{
freopen ("sumdiv.in", "r", stdin);
scanf ("%d %d", &A, &B);
}
void Print ()
{
freopen ("sumdiv.out", "w", stdout);
printf ("%d\n", S);
}
int main ()
{
Read ();
Solve ();
Print ();
return 0;
}