Pagini recente » Cod sursa (job #1368732) | Cod sursa (job #1597093) | Cod sursa (job #1364900) | Cod sursa (job #2288341) | Cod sursa (job #2675677)
#include <bits/stdc++.h>
using namespace std;
long long divi[10], expp[10];
long long descompunere(long long n)
{
long long d=2,e,x,nrdiv=0;
while (n>=d*d)
{
e = 0;
while (n%d==0)
{
e++;
n/=d;
}
if (e>0)
{
divi[nrdiv]=d;
expp[nrdiv]=e;
x=nrdiv;
nrdiv=x+1;
}
d++;
}
if (n>1)
{
divi[nrdiv]=n;
expp[nrdiv]=1;
x=nrdiv;
nrdiv=x+1;
}
return nrdiv;
}
long long putere(long long a,long long b)
{
long long put=1;
while (b>0)
{
if (b%2==1)
put=(long long)put*a%9901;
a=(long long)a*a%9901;
b /= 2;
}
return put;
}
int main()
{
long long a,b,nrdiv,i;
long long invs,put,s;
freopen( "sumdiv.in", "r",stdin );
freopen( "sumdiv.out", "w",stdout );
scanf("%lld%lld", &a, &b );
nrdiv=descompunere(a);
s=1;
for (i=0; i<nrdiv; i++)
{
if (divi[i]%9901==1)
{
s=(long long )s*(expp[i]*b+1)% 9901;
}
else
{
put=putere(divi[i],expp[i]*b+1);
put-=1;
if (put==-1)
{
put=9900;
}
invs=divi[i]-1;
invs=putere(invs,9901-2);
put=(long long)put *invs%9901;
s=((long long)s*put)%9901;
}
}
printf("%lld",s);
return 0;
}