Pagini recente » Cod sursa (job #793033) | Cod sursa (job #384288) | Cod sursa (job #1609257) | Cod sursa (job #1101060) | Cod sursa (job #306683)
Cod sursa(job #306683)
#include <cstdio>
using namespace std;
#define file_in "sumdiv.in"
#define file_out "sumdiv.out"
#define Nmax 1010
#define prim 9901
#define ll long long
#define ii inline
ll x,y;
ll a[Nmax];
ll b[Nmax];
ll sol,nr=0,p,xx;
ii ll put(ll a, ll b)
{
ll x;
if (b==1)
return a;
else
if (b%2==0)
{
x=put(a,b/2);
return (x*x)%prim;
}
else
{
x=put(a,b/2);
return (((x*x)%prim)*a)%prim;
}
}
ii void div()
{
ll i;
for (i=2;i*i<=x;++i)
{
if (x%i==0)
{
continue;
}
nr++;
a[nr]=i;
while(x%i==0)
{
x/=i;
++b[nr];
}
}
if (x!=1)
{
nr++;
a[nr]=x;
b[nr]=1;
}
}
ii void citire()
{
//freopen(file_in,"r",stdin);
//freopen(file_out,"w",stdout);
scanf("%lld %lld", &x,&y);
}
ii void solve()
{
ll i;
div();
sol=1;
for (i=1;i<=nr;++i)
{
b[i]=b[i]*y;
if (a[i]%prim==1)
{
p=b[i]+1;
}
else
{
p=(put(a[i],b[i])*a[i]+prim-1)%prim;
p=(p*put(a[i]-1,prim-2)%prim)%prim;
}
sol=(sol*p)%prim;
}
}
ii void scrie()
{
printf("%lld", sol);
}
int main()
{
citire();
if (y==0) printf("1");
else
{
solve();
scrie();
}
fclose(stdin);
fclose(stdout);
return 0;
}