Pagini recente » Arhiva de probleme | Cod sursa (job #1761814) | Cod sursa (job #926329) | Cod sursa (job #1576952) | Cod sursa (job #1900557)
#include <cstdio>
#define n 9901
using namespace std;
long long int a, b, nr;
int putere(int a, int b)
{
if(b==0)
return 1;
if(b%2==0)
return putere(a*a, b/2)%n;
return a*putere(a, b-1)%n;
}
void inv(int a, int b, int &k, int &l)
{
if(b==0)
{
l=1;
k=0;
return;
}
int k1, l1;
inv(b, a%b, k1, l1);
l=k1;
k=l1-(a/b)*k1;
}
int prog(int p, int f)
{
int k, l;
inv(p-1, n, k, l);
return ((putere(p, f+1)-1)*l)%n;
}
int sdiv()
{
int s=1, d=3, p=0;
while(a%2==0)
{
p++;
a/=2;
}
if(p)
s=(s*prog(2, p*b))%n;
while(d*d<=a)
{
p=0;
while(a%d==0)
{
p++;
a/=d;
}
if(p)
s=(s*prog(d, p*b))%n;
d+=2;
}
if(a>1)
s=(s*prog(a, b))%n;
return s;
}
int main()
{
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%lld %lld", &a, &b);
a=a%n, b=b%n;
if(a==0)
printf("0");
else
{
int rez=sdiv();
if(rez<0)
rez+=9901;
printf("%d", rez);
}
return 0;
}