Cod sursa(job #32819)

Utilizator MariusMarius Stroe Marius Data 18 martie 2007 16:03:36
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>
using namespace std;

const char iname[] = "kperm.in";
const char oname[] = "kperm.out";

typedef long long i64;

#define MAX_N  5007

#define modulo 666013 

i64 N, K;

i64 F[MAX_N];

/* Perm(N%K) * Perm(K - N%K) * [Perm(N/K)]^(K-N%K) * [Perm(N/K +1)] ^(N%K) */

int main(void)
{
	freopen(iname, "r", stdin);
	i64 i;
	i64 sum;
	i64 Res;
	scanf("%lld %lld", & N, & K);

	for (i = F[0] = 1; i <= N; ++ i)
		F[i] = (F[i - 1] * i) % modulo;
	sum = 1;
	for (i = 1; i <= K - N % K; ++ i)
		sum = (sum * F[N / K]) % modulo;
	Res = sum;
	sum = 1;
	for (i = 1; i <= N % K; ++ i) 
		sum = (sum * F[N/K + 1]) % modulo;
	Res = (Res * sum) % modulo;
	Res = (Res * F[N % K]) % modulo;
	Res = (Res * F[K - N % K]) % modulo;

	freopen(oname, "w", stdout);
	if (K & 1)
		printf("%lld\n", Res);
	else
		printf("0\n");

	return 0;
}