Pagini recente » Cod sursa (job #2973734) | Cod sursa (job #931332) | Cod sursa (job #3262618) | Cod sursa (job #1865012) | Cod sursa (job #494602)
Cod sursa(job #494602)
#include <cstdio>
const int r = 9901;
const int N = 1<<13;
int p[N],invers[r],np;
bool c[N];
void ciur()
{
int i,j;
for(i=2 ; i*i < N ; ++i)
if(!c[i])
for(j=i*i ; j < N ; j+=i)
c[j] = true;
for(i=2 ; i < N ; ++i)
if(!c[i])
p[++np] = i;
}
inline int putere(int a,int n)
{
int pr = 1;
while(n != 0)
{
if(n&1)
pr = (long long)pr*a%r;
a = (long long)a*a%r;
n >>= 1;
}
return pr;
}
void calcul_invers()
{
int i;
for(i=1 ; i<r ; ++i)
{
if(invers[i]!=0)
continue;
invers[i] = putere(i,r-2);
}
}
int suma(int a,int b)
{
int i,exp,s = 1,pow;
for(i=1 ; p[i]*p[i] <= a ; ++i)
{
if(a%p[i] != 0)
continue;
for(exp=0 ; a%p[i] == 0 ; a/=p[i])
++exp;
pow = putere(p[i],exp*b+1);
if(p[i]%r == 1)
s = (long long)s*(exp+1)%r;
else
s = (long long)s*((pow+r-1)%r)*invers[(p[i]+r-1)%r]%r;
}
if(a != 1)
if(a%r == 1)
s = (long long)s*(b%r+1)%r;
else
{
pow = putere(a,b+1);
s = (long long)s*((pow+r-1)%r)*invers[(a+r-1)%r]%r;
}
return s%r;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
int a,b;
scanf("%d%d",&a,&b);
ciur();
calcul_invers();
printf("%d\n",suma(a,b));
return 0;
}