Pagini recente » Cod sursa (job #2818886) | Cod sursa (job #552119) | Cod sursa (job #1960291) | Cod sursa (job #1631886) | Cod sursa (job #3165021)
#include <fstream>
#define MOD 9901
using namespace std;
long long int a, b, d, cnt, result, c;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
void euclid(int a, int b, int *d, int *x, int *y)
{
if(b == 0)
{
*d = a;
*x = 1;
*y = 0;
}
else
{
int x0, y0;
euclid(b, a % b, d, &x0, &y0);
*x = y0;
*y = x0 - (a / b) * y0;
}
}
int inversmodular(int a, int b)
{
int d, x, y;
euclid(a, b, &d, &x, &y);
while(x <= 0)
x += b;
return x;
}
long long int exp(long long int a, long long int b)
{
long long int result;
result = 1;
while(b > 0)
{
if(b % 2 == 1)
result = result * a % MOD;
a = a * a % MOD;
b /= 2;
}
if(result == 0)
result = MOD;
return result;
}
int main()
{
fin >> a >> b;
d = 2;
cnt = 0;
result = 1;
while(a > 1)
{
cnt = 0;
while(a % d == 0)
{
++cnt;
a /= d;
}
if(cnt > 0)
{
cnt *= b;
c = (exp(d, cnt + 1) - 1) % MOD;
if(d % MOD == 1)
result = (result * (cnt + 1) % MOD) % MOD;
else
result = (result * (c * (inversmodular(d - 1, MOD) % MOD))) % MOD;
}
d++;
if(d * d > a && a > 1)
d = a;
}
fout << result << "\n";
return 0;
}