Pagini recente » Cod sursa (job #801600) | Cod sursa (job #2518459) | Cod sursa (job #297195) | Cod sursa (job #33587) | Cod sursa (job #26125)
Cod sursa(job #26125)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define NMAX 5010
#define MOD 666013
#define LL long long
int N, K;
int a[NMAX];
int nap[NMAX];
int mod[NMAX];
int main()
{
int i, s;
freopen("kperm.in", "r", stdin);
freopen("kperm.out", "w", stdout);
scanf("%d %d", &N, &K);
/*
int e;
N = 3; K = 5;
for (i = 1; i <= N; i++) a[i] = i;
int nr = 0;
while (1) {
s = 0; e = 1;
for (i = 1; i <= N; i++) {
s += a[i];
if (i > K) s -= a[i - K];
if (i >= K && s % K != 0) e = 0;
}
if (e) {
// for (i = 1; i <= N; i++) printf("%d ", a[i] % K);
// printf("\n");
}
nr += e;
if (!next_permutation(a + 1, a + N + 1)) break;
}
printf("%d\n", nr);
*/
s = 0;
for (i = 1; i < K; i++) s = (s + i) % K;
if (s) {
printf("0\n");
return 0;
}
for (i = 1; i <= N; i++) nap[i % K]++;
mod[1] = 1;
for (i = 2; i <= N; i++) mod[i] = ((LL)mod[i-1] * i) % MOD;
int md = N % K;
int rez;
if (!md) rez = mod[K];
else rez = ((LL) mod[md] * mod[K - md]) % MOD;
for (i = 0; i < K; i++) rez = ((LL)rez * mod[nap[i]]) % MOD;
printf("%d\n", rez);
fclose(stdout);
return 0;
}