Pagini recente » Cod sursa (job #2243225) | Cod sursa (job #2914759) | Cod sursa (job #545906) | Cod sursa (job #3286028) | Cod sursa (job #2666981)
#include <iostream>
#include <stdio.h>
#define MOD 9901
using namespace std;
int prod;
void rid_put(int x, int put, int mod) {
if (put == 0)
return;
if (put % 2 == 1)
prod = (1ll * prod * x) % mod;
x = (1ll * x * x) % mod;
rid_put(x, put / 2, mod);
}
int sum_div(int a, int b) {
int d, put, nr1, nr2, sol;
sol = 1;
for (d = 2; d * d <= a; d++) {
put = 0;
while (a % d == 0) {
put++;
a /= d;
}
if (put > 0) {
put *= b;
if (d % MOD != 1) {
prod = 1;
rid_put(d % MOD, put + 1, MOD);
nr1 = (prod - 1 + MOD) % MOD;
prod = 1;
rid_put((d - 1 + MOD) % MOD, MOD - 2, MOD);
nr2 = prod;
sol = (1ll * sol * nr1) % MOD;
sol = (1ll * sol * nr2) % MOD;
}
else
sol = (1ll * sol * (put + 1)) % MOD;
}
}
if (a > 1) {
d = a;
put = b;
if (d % MOD != 1) {
prod = 1;
rid_put(d % MOD, put + 1, MOD);
nr1 = (prod - 1 + MOD) % MOD;
prod = 1;
rid_put((d - 1 + MOD) % MOD, MOD - 2, MOD);
nr2 = prod;
sol = (1ll * sol * nr1) % MOD;
sol = (1ll * sol * nr2) % MOD;
}
else
sol = (1ll * sol * (put + 1)) % MOD;
}
return sol;
}
int main() {
FILE *fin, *fout;
int a, b;
fin = fopen("sumdiv.in", "r");
fscanf(fin, "%d%d", &a, &b);
fclose( fin );
fout = fopen("sumdiv.out", "w");
if (a)
fprintf(fout, "%d", sum_div(a, b));
else
fprintf(fout, "0");
fclose( fout );
return 0;
}