Pagini recente » Cod sursa (job #354691) | Cod sursa (job #467689) | Cod sursa (job #1703003) | Cod sursa (job #2924248) | Cod sursa (job #3163526)
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int mod(long long a)
{
long long r = a % 9901;
while(r < 0)
r+=9901;
return r;
}
int pow(long long a, long long b)
{
if (b==0)
return 1;
int f = mod(pow(a, b >> 1));
int r = mod(f*f);
if(b & 1)
r=mod(r * a);
return r;
}
void cmmdc(long long a, long long b, int &x, int &y)
{
if (b == 0)
{
x = 1;
y = 0;
return;
}
int x0, y0;
cmmdc(b, a % b, x0, y0);
x=y0;
y=x0-(a/b)*y0;
}
int invmod(long long a)
{
int x, y;
cmmdc(a, 9901, x, y);
return mod(x);
}
int prg(long long a, long long b)
{
if(a==1)
return b+1;
int a1 = mod(pow(a, b+1)-1);
int a2 = mod(invmod(a-1));
return mod(a1 * a2);
}
int main()
{
long long a, b;
fin >> a >> b;
if(mod(a)==0)
{
fout << 1;
return 0;
}
long long p=0;
while(a%2==0)
{
p++;
a/=2;
}
long long r=mod(prg(2, p * b));
for (int i=3; i*i <= a; i+=2)
{
if(a%i)
continue;
while(a%i==0)
{
p++;
a/=i;
}
r=mod(r*prg(mod(i), p*b));
}
if(a>1)
r=mod(r*prg(mod(a), b));
fout << r;
return 0;
}