Pagini recente » Cod sursa (job #719899) | Cod sursa (job #1588903) | Cod sursa (job #695654) | Cod sursa (job #313806) | Cod sursa (job #496216)
Cod sursa(job #496216)
#include<cstdio>
const int R=9901;
const int N=150000;
int a,b,nr,pr[N],exp[N],s=1,inv[R+5];
void citire()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%d%d",&a,&b);
}
void desc(int x)
{
int p;
for (int i=2;i*i<=x;++i)
if (x%i==0)
{
p=0;
while (x%i==0)
{
++p;
x/=i;
}
pr[++nr]=i;
exp[nr]=p;
}
if (x!=1)
{
pr[++nr]=x;
exp[nr]=1;
}
}
int putere(int n,int p)
{
int rez=1,x=n%R;
while (p)
{
if (p&1)
{
rez*=x;
rez%=R;
}
x*=x;
x%=R;
p>>=1;
}
return rez;
}
void inverse()
{
inv[1]=1;
for (int i=2;i<R;++i)
if (inv[i]==0)
{
inv[i]=putere(i,R-2);
inv[inv[i]]=i;
}
}
void calcul()
{
for (int i=1;i<=nr;++i)
exp[i]*=b;
for (int i=1;i<=nr;++i)
{
s*=(putere(pr[i],exp[i]+1)+R-1)%R;
s%=R;
s*=inv[(pr[i]+R-1)%R];
s%=R;
}
printf("%d\n",s);
}
int main()
{
citire();
desc(a);
inverse();
calcul();
return 0;
}