Pagini recente » Cod sursa (job #1422331) | Cod sursa (job #2268675) | Cod sursa (job #1799618) | Cod sursa (job #1035104) | Cod sursa (job #1901735)
#include <iostream>
#include <cstdio>
#define MOD 9901
using namespace std;
long long a,b,sol=1;
int invers(int al, int m)
{
int m0=m, t, q;
int x0=0, x1=1;
if (m==1)
return 0;
while (al>1)
{
q=al/m;
t=m;
m=al%m, al=t;
t=x0;
x0=x1-q*x0;
x1=t;
}
if (x1 < 0)
x1 += m0;
return x1;
}
int pow(int baza, long long p)
{
int s=1;
while(p)
{
if(p%2==0)
baza=(baza*baza)%MOD, p/=2;
else
s=(s*baza)%MOD, p--;
}
if(s==0)
s+=MOD;
return s;
}
void putere(int baza)
{
long long p=0;
while(a%baza==0 && a>1)
{
p++;
a/=baza;
}
p*=b;
if((baza-1)%MOD==0)
sol=(sol*((p+1)%MOD))%MOD;
else
sol=(sol*(pow(baza,p+1)-1)%MOD*invers(baza-1,MOD))%MOD;
}
void prim()
{
if(a%2==0)
putere(2);
if(a%3==0)
putere(3);
for(long long i=5;i*i<=a && a>1;i+=6)
{
if(a%i==0)
putere(i);
if(a%(i+2)==0)
putere(i+2);
}
if(a>1)
if((a-1)%MOD==0)
sol=(sol*((b+1)%MOD))%MOD;
else
sol=(sol*(pow(a,b+1)-1)%MOD*invers(a-1,MOD))%MOD;
}
int main()
{
freopen("sumdiv.in","r",stdin);
freopen("sumdiv.out","w",stdout);
scanf("%lld %lld", &a, &b);
if(a==0)
cout<<"0";
else
prim(), cout<<sol;
return 0;
}