Pagini recente » Rotatie lexicografic minima | Cod sursa (job #1087597) | Cod sursa (job #76052) | Cod sursa (job #1957761) | Cod sursa (job #1487985)
#include <fstream>
using namespace std;
const int kMod = 9901;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int A, B, ans = 1;
int Pow(int base, int p) {
int ans = 1;
while (p) {
if (p & 1)
ans = (ans * base) % kMod;
base = (base * base) % kMod;
p >>= 1;
}
return ans;
}
int Div(int a, int b) {
return (a * Pow(b, kMod - 2)) % kMod;
}
int Minus1(int x) {
return (x - 1 + kMod) % kMod;
}
void Add(int fact, int p) {
ans = (ans * Div(Minus1(Pow(fact, p * B + 1)), Minus1(fact))) % kMod;
}
int main() {
fin >> A >> B;
for (int i = 2; i * i <= A; ++i)
if (A % i == 0) {
int pw = 0;
while (A % i == 0) {
A /= i;
++pw;
}
Add(i, pw);
}
if (A > 1)
Add(A, 1);
fout << ans << "\n";
return 0;
}