Pagini recente » Cod sursa (job #2498994) | Cod sursa (job #1938539) | Cod sursa (job #2341004) | Cod sursa (job #1929781) | Cod sursa (job #1066233)
#include<fstream>
#define MOD 9901
using namespace std;
ifstream fin("sumadiv.in");
ofstream fout("sumadiv.out");
long long A, B, sdiv=1, rez;
long long f[100], expo[100], N, d, i;
void putere(long long x, long long y) {
while (y > 0)
if (y % 2 == 0) { x = (x*x)%MOD; y /= 2; }
else { rez = (rez*x)%MOD; --y; }
}
void desc_fact(long long x)
{
long long d = 2;
if (x%d == 0)
{
N++;
f[N] = d;
while (x%d == 0)
{
++expo[N];
x /= d;
}
}
++d;
while (d*d <= x)
if (x%d != 0)
d += 2;
else
{
N++;
f[N] = d;
while (x%d == 0)
{
expo[N]++;
x /= d;
}
d += 2;
}
if (x > 1)
{
N++;
expo[N] = 1;
f[N] = x;
}
}
void euclid(long long &a, long long &b, long long x, long long y) {
long long ao, bo;
if (y == 0) { a = 1; b = 0; }
else {
euclid(ao, bo, y, x%y);
a = bo;
b = (ao - ((x / y)*bo)%MOD + MOD)%MOD;
}
}
int inv(long long x) {
long long a, b;
euclid(a, b, x, MOD);
return(a);
}
int main()
{
fin >> A >> B;
desc_fact(A);
for (i = 1; i <= N; ++i)
expo[i] *= B;
for (i = 1; i <= N; ++i)
{
rez = 1;
putere(f[i], expo[i]+1);
sdiv = ((rez + MOD - 1)%MOD*sdiv)%MOD;
sdiv = (inv(f[i]-1)%MOD*sdiv)%MOD;
}
fout << sdiv%MOD << '\n';
return 0;
}