Pagini recente » Cod sursa (job #464881) | Cod sursa (job #2091829) | Cod sursa (job #1361927) | Cod sursa (job #602683) | Cod sursa (job #2177603)
#include <vector>
#include <fstream>
#define MOD 9901
#define DMAX 50000010
std::ifstream fin("sumdiv.in");
std::ofstream fout("sumdiv.out");
int sol;
int a, b;
bool sieve[DMAX];
std::vector<int> primes;
void genPrimes() {
for (int i = 2; i * i <= a; i++)
if (!sieve[i])
for (int j = i * i; j <= a; j += i)
sieve[j] = true;
primes.push_back(2);
for (int i = 3; i <= a; i += 2)
if (!sieve[i])
primes.push_back(i);
}
int pow(int a, int b) {
if (!b)
return 1;
if (b & 1)
return a * pow(a * a % MOD, b >> 1) % MOD;
return pow(a * a % MOD, b >> 1) % MOD;
}
int modInv(int x) {
return pow(x, MOD - 2);
}
int main() {
sol = 1;
fin >> a >> b;
genPrimes();
for (int d = 0; a > 1; d++) {
int exp = 0;
while (a % primes[d] == 0) {
exp++;
a /= primes[d];
}
if (exp) {
int fact = (pow(primes[d], exp * b + 1) - 1) * modInv(primes[d] - 1) % MOD;
sol = sol * fact % MOD;
}
}
if (sol < 0)
fout << sol + MOD << '\n';
else
fout << sol << '\n';
fout.close();
return 0;
}