Pagini recente » Cod sursa (job #731116) | Cod sursa (job #791522) | Cod sursa (job #2505012) | Cod sursa (job #1950782) | Cod sursa (job #3205413)
#include <bits/stdc++.h>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const int MOD = 9901;
int n, m;
// BeginCodeSnip{Binary Exponentiation}
int exp(int x, int y) {
int aux = x, ans = 1;
for (int bit = 0; (1 << bit) <= y; bit++) {
if ((1 << bit) & y) {
ans = ans * aux % MOD;
}
aux = aux * aux % MOD;
}
return ans;
}
// EndCodeSnip
// BeginCodeSnip{Modular Inverse}
int inv(int x) {
// The Modular Inverse only exists if x % MOD != 0
if(x%MOD == 0) return 1;
if (x <= 1) { return x; }
return MOD - MOD / x * inv(MOD % x) % MOD;
}
// EndCodeSnip
int main() {
in >> n >> m;
// Prime Factorization
long long div_sum = 1;
for (int d = 2; d * d <= n; d++) {
int p = 0;
while (n % d == 0) {
n /= d;
p++;
}
if (!p) { continue; }
p *= m;
div_sum = div_sum * (exp(d, p * m + 1) + MOD - 1) * inv(d - 1) % MOD;
}
if (n > 1) {
div_sum = div_sum * (exp(n, m + 1) + MOD - 1) * inv(n - 1) % MOD;
}
out << div_sum;
}