Cod sursa(job #785353)

Utilizator danalex97Dan H Alexandru danalex97 Data 8 septembrie 2012 15:46:27
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

const int P = 666013;
const int Nmax = 5010;
#define int64 long long

int64 fact[Nmax];
int i, j, k, r, N, K, sum, insol;
int64 nsol;

int main()
{
	freopen("kperm.in", "r", stdin);
	freopen("kperm.out", "w", stdout);

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

	fact[0] = 1;

	for (i = 1; i <= N; i++) fact[i] = (fact[i - 1] * (int64) i) % P;
	
	r = N % K;
	sum = (K * (K - 1)) / 2;

	if (sum % K != 0) 
	{
		printf("0\n");
		return 0;
	}

	nsol = fact[r] % P;
	for (i = 1; i <= r; i++) 
		nsol = (nsol * fact[(N / K) + 1]) % P;
	nsol = (nsol * fact[K - r]) % P;
	for (i = r + 1; i <= K; i++) 
		nsol = (nsol * fact[N / K]) % P;

	printf("%d\n", (int) nsol);
}