Pagini recente » Cod sursa (job #1935947) | Cod sursa (job #838005) | Cod sursa (job #3189439) | Cod sursa (job #2110628) | Cod sursa (job #490667)
Cod sursa(job #490667)
#include <stdio.h>
#include <assert.h>
#define MOD 666013
#define maxM 5010
int Perm[maxM];
int log_pow (int A, int N) {
if (N == 0) return 1;
if (N == 1) return A;
int x = log_pow(A, N / 2);
x = (1LL * x * x) % MOD;
if (N % 2 == 1)
return (1LL * x * A) % MOD;
return x;
}
int main () {
int N, K, i, P, rest, A, B, max;
freopen("kperm.in", "r", stdin);
freopen("kperm.out", "w", stdout);
scanf("%d%d", &N, &K);
if (K % 2 == 0) {
printf("%d\n", 0);
return 0;
}
P = N / K;
rest = N - P * K;
max = P > K ? P : K;
for (i = 1, Perm[0] = 1; i <= max + 1; ++ i)
Perm[i] = (1LL * Perm[i - 1] * i) % MOD;
A = (1LL * log_pow(Perm[P + 1], rest) * Perm[rest]) % MOD;
B = (1LL * log_pow(Perm[P], K - rest) * Perm[K - rest]) % MOD;
assert(A);
assert(B);
fprintf(stderr, "%d %d\n", A, B);
printf("%d\n", (int) ((1LL * A * B) % MOD));
return 0;
}