Pagini recente » Cod sursa (job #3281447) | Cod sursa (job #2871333) | Cod sursa (job #3277641) | Cod sursa (job #3210767) | Cod sursa (job #3256318)
#include <fstream>
using namespace std;
const int MOD = 9901;
int indicatorul_euler(int n)
{
int e = n, d = 2;
while (d * d <= n)
{
if (n % d == 0)
{
e = e / d * (d - 1);
while (n % d == 0)
{
n /= d;
}
}
d++;
}
if (n != 1)
{
e = e / n * (n - 1);
}
return e;
}
int putere(int a, int n)
{
a %= MOD;
int p = 1;
while (n != 0)
{
if (n % 2 != 0)
{
p = (p * a) % MOD;
}
a = (a * a) % MOD;
n /= 2;
}
return p;
}
int invers(int a, int fi)
{
return putere(a, fi - 1);
}
int main()
{
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
int a, n;
in >> a >> n;
int d = 2, sum = 1, fi = indicatorul_euler(MOD);
while (d * d <= a)
{
if (n % d == 0)
{
int p = 0;
while (a % d == 0)
{
p++;
a /= d;
}
sum = ((long long)sum * (putere(d, p * n + 1) - 1 + MOD) * invers(d - 1, fi)) % MOD;
}
d++;
}
if (a != 1)
{
sum = ((long long)sum * (putere(a, n + 1) - 1 + MOD) * invers(a - 1, fi)) % MOD;
}
out << sum;
in.close();
out.close();
return 0;
}