Cod sursa(job #41268)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 28 martie 2007 09:27:35
Problema Kperm Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>

const int MOD = 666013;
const int NMAX = 5120;

int F[NMAX];

int fact(int k) {
	if (k == 0) return 1;

	if (F[k] == 0) 
		F[k] = ((long long)fact(k - 1) * k) % MOD;
	
	return F[k];
}

int topower(int k, int p) {
	int v, rez = 1;

	for (v = k; p; p >>= 1, v = ((long long)v * v) % MOD)
		if (p & 1)
			rez = ((long long)rez * v) % MOD;
	
	return rez;
}

int main() {
	
	freopen("kperm.in", "rt", stdin);
	freopen("kperm.out", "wt", stdout);

	int N, K;

	scanf(" %d %d", &N, &K);

	int C, R, rez;

	C = N / K;
	R = N % K;

	if (R & 1) {
		rez = ((long long)fact(R) * fact(K - R)) % MOD;
		rez = ((long long)rez * topower(fact(C + 1), R)) % MOD;
		rez = ((long long)rez * topower(fact(C), K - R)) % MOD;
	} else {
		rez = 0;
	}

	printf("%d\n", rez);
	return 0;
}