Pagini recente » Monitorul de evaluare | Cod sursa (job #2015594) | Cod sursa (job #2094396) | Cod sursa (job #502617) | Cod sursa (job #2663040)
#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;
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;
}
}
if (a > 0) {
d = a;
put = b;
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;
}
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");
fprintf(fout, "%d", sum_div(a, b));
fclose( fout );
return 0;
}