Pagini recente » Clasament simulare_oji_2023_clasele_11_12_10_martie | Cod sursa (job #760869) | Cod sursa (job #2255372) | Cod sursa (job #2025841) | Cod sursa (job #2076082)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int MOD = 9901;
int a, b, oa;
long long sum = 1;
bool use[7100];
void fill(int p) {
for (int i = p + p; i * i <= a; i += p) use[i] = true;
}
int pow(int a, int n) {
if (n == 0) return 1;
a %= MOD;
if (n % 2 == 0) return pow((a * a), n / 2) % MOD;
return (a * pow(a, n - 1)) % MOD;
}
int geometrique(int q, int n) {
q %= MOD;
if (q == 1) return n + 1;
int nr = pow(q, n + 1) - 1;
int num = pow(q - 1, MOD - 2);
return (nr * num) % MOD;
}
void add (int p) {
if (a % p != 0) return;
int exp = 0;
while (a % p == 0) {
exp++;
a /= p;
}
sum *= geometrique(p, exp * b);
sum %= MOD;
}
int main()
{
in >> a >> b;
int p;
oa = a;
for (p = 2; p * p <= a; ++p) {
if (!use[p]) {
fill(p);
add(p);
}
}
if (a > 1) {
sum *= geometrique(a, b);
sum %= MOD;
}
out << sum;
return 0;
}