Pagini recente » Cod sursa (job #2069361) | Cod sursa (job #1360295) | Cod sursa (job #3169567) | Cod sursa (job #1373833) | Cod sursa (job #2092337)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD = 9901;
int A, B, prod = 1;
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 inversmod(int a, int P)
{
int d, x, y;
EuclidExtins(a, P, d, x, y);
x %= P;
if(x < 0)x += P;
return x;
}
int aranjmod(int n, int k, int P)
{
long long nr = 1;
for(int i = 0; i < k; i++)
{
nr *= (n - i) % P;
nr %= P;
}
return nr;
}
int putere(int n, int p)
{
int a = 1;
while(p)
{
if(p % 2 == 0)
{
n = 1LL * n * n % MOD;
p /= 2;
}
else
{
a = 1LL * a * n % MOD;
p--;
}
}
return a;
}
void calc(int p, int alfa)
{
alfa *= B;
p %= MOD;
if(p != 0)
{
if(p == 1)
prod = prod * (alfa + 1) % MOD;
else
{
prod = prod * (putere(p, alfa + 1) - 1) % MOD;
prod = prod * inversmod(p - 1, MOD) % MOD;
}
}
}
void divizori()
{
for(int i = 2; i * i <= A; i++)
if(A % i == 0)
{
int ex = 0;
do
{
ex++;
A /= i;
}
while(A % i == 0);
calc(i, ex);
}
if(A > 1)
calc(A, 1);
}
int main()
{
f >> A >> B;
divizori();
g << prod;
return 0;
}