Pagini recente » Cod sursa (job #485512) | Cod sursa (job #2337010) | Cod sursa (job #1238355) | Cod sursa (job #141282) | Cod sursa (job #170898)
Cod sursa(job #170898)
#include <iostream>
#define MOD 9901
using namespace std;
long logpow(long A, long B) {
long R(1);
for (long i = 1 << 30; i > 0; i >>= 1) {
R = (R * R) % MOD;
if (i & B)
R = (R * A) % MOD;
}
return R;
}
long progresie(long p, long q) {
long a = (logpow(p, q+1) - 1 + MOD) % MOD;
long b = p - 1;
long c;
for (c = 1; c <= MOD; ++c)
if ((c * b) % MOD == a)
break;
return c % MOD;
}
int main(int argc, char *argv[]) {
long N, K;
FILE *fi = fopen("sumdiv.in", "r");
fscanf(fi, "%ld %ld", &N, &K);
fclose(fi);
long S(0);
long p;
for (p = 0; N % 2 == 0; ++p)
N /= 2;
S = progresie(2, K*p) % MOD;
for (long d = 3; d*d <= N; d += 2) {
if (N % d == 0) {
for (p = 0; N % d == 0; ++p)
N /= d;
S = (S * progresie(d % MOD, K*p)) % MOD;
}
}
if (N > 1)
S = (S * progresie(N % MOD, K)) % MOD;
FILE *fo = fopen("sumdiv.out", "w");
fprintf(fo, "%ld\n", S);
fclose(fo);
return 0;
}