Pagini recente » Cod sursa (job #1461442) | Cod sursa (job #1739671) | Cod sursa (job #1666230) | Cod sursa (job #2987803) | Cod sursa (job #1902984)
#include <cstdio>
#define n 9901
using namespace std;
int a, b;
int putere(int a, long long 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 s)
{
int k, l;
inv(p-1, n, k, l);
if(l<=0)
l=n+l%n;
int put=putere(p%n, f+1);
if(put==0)
put+=n;
return ((s*(put-1)%n)*l)%n;
}
int sdiv()
{
int d=2, s=1;
long long p;
while((long long)d*d<=a && a>1)
{
p=0;
while(a%d==0)
{
p++;
a/=d;
}
if(p)
{
if((d-1)%n==0)
s=(s*((p*b+1)%n))%n;
else
s=prog(d, (p*b)%n, s);
}
d++;
}
if(a>1)
{
p=b;
d=a;
if((d-1)%n==0)
s=(s*((p+1)%n))%n;
else
s=prog(d, p, s);
}
return s;
}
int main()
{
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%d %d", &a, &b);
if(a==0)
printf("0");
else
{
int rez=sdiv();
if(rez<=0)
rez=n+rez%n;
printf("%d", rez);
}
return 0;
}