Pagini recente » Cod sursa (job #1368790) | Cod sursa (job #3206341) | Cod sursa (job #2385995) | Cod sursa (job #47785) | Cod sursa (job #2092997)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumadiv.in");
ofstream g("sumadiv.out");
int A, B;
const int MOD = 9901;
void EuclidExtins(int a, int b, int &d, int &x, int &y)
{
int x1 = 0, y1 = 1;
x = 1, y = 0;
while(b != 0)
{
int q = a / b;
int r = a % b;
a = b;
b = r;
int x0 = x - x1 * q;
int y0 = y - y1 * q;
x = x1;
y = y1;
x1 = x0;
y1 = y0;
}
d = a;
}
int pow(int a, int p)
{
int x = 1;
while(p > 0)
{
if(p % 2 == 0)
{
a = 1LL * a * a % MOD;
p /= 2;
}
else
{
x = 1LL * x * a % MOD;
p--;
}
}
return x;
}
int InversModular(int A, int N)
{
int X, Y, d;
EuclidExtins(A, N, d, X, Y);
X %= N;
if(X < 0)X += N;
return X;
}
int Factor(int k, int pi)
{
k %= MOD;
pi *= B;
if(k == 0) return 1;
if(k == 1) return (pi + 1) % MOD;
return (pow(k, pi + 1) - 1) * InversModular(k - 1, MOD) % MOD;
}
int main()
{
int P=1;
f >> A >> B;
for(int i = 2; i * i <= A; i++)
{
if(A % i == 0)
{
int pi = 0;
do
{
pi++;
A /= i;
}
while(A % i == 0);
P = 1LL * P * Factor(i, pi) % MOD;
}
}
if(A > 1)
{
P = 1LL * P * Factor(A, 1) % MOD;
}
g<<P;
return 0;
}