Pagini recente » Cod sursa (job #606835) | Cod sursa (job #2188960) | Cod sursa (job #820382) | Cod sursa (job #3039322) | Cod sursa (job #1902900)
#include <cstdio>
#define n 9901
using namespace std;
long long int a, b, nr;
int putere(long long 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);
if(l<=0)
l=n+l%n;
return (((putere(p,((f+1)%n))-1)%n)*l)%n;
}
int sdiv()
{
int s=1;
long long d=2, p=0;
while(d*d<=a && a>1)
{
p=0;
while(a%d==0)
{
p++;
a/=d;
}
if(p)
{
if((d-1)%n==0)
s=(s*((p+1)%n))%n;
else
s=(s*prog(d, (p*b)%n))%n;
}
d++;
}
if(a>1)
{
p=b;
d=a;
if((d-1)%n==0)
s=(s*((p+1)%n))%n;
else
s=(s*prog(d, p))%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();
printf("%d", rez);
}
return 0;
}