Pagini recente » Cod sursa (job #1951728) | Cod sursa (job #803092) | Cod sursa (job #399521) | Cod sursa (job #1628211) | Cod sursa (job #169024)
Cod sursa(job #169024)
#include <cstdio>
const int MOD = 9901;
int A, B, R, N, D[1024], P[16], C[16];
int power(int u, int p) {
int v;
for (u %= MOD, v = 1; p; p >>= 1, u = (u * u) % MOD)
if (p & 1)
v = (v * u) % MOD;
return v;
}
int main(void) {
freopen("sumdiv.in", "rt", stdin);
freopen("sumdiv.out", "wt", stdout);
int i, j, stop, s;
scanf(" %d %d", &A, &B);
if (A % 2 == 0) {
P[N] = 2;
while (A % 2 == 0) ++C[N], A /= 2;
++N;
}
for (i = 3; i * i <= A; i += 2)
if (A % i == 0) {
P[N] = i;
while (A % i == 0) ++C[N], A /= i;
++N;
}
if (A != 1) {
P[N] = A;
C[N] = 1;
++N;
}
R = D[0] = 1;
for (i = 0; i < N; ++i) {
s = (power(P[i], C[i] * B) - 1;
if (s < 0) s += MOD;
s *= power(P[i]-1, MOD-2)) % MOD;
s = (s * P[i]) % MOD;
stop = 1 << i;
for (j = 0; j < stop; ++j) {
R += D[j | (1 << i)] = (s * D[j]) % MOD;
if (R >= MOD) R -= MOD;
}
}
printf("%d\n", R);
return 0;
}