Cod sursa(job #515909)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 22 decembrie 2010 17:50:34
Problema Kperm Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>
#define NMAX 5005
#define MOD 666013
#define ll long long
int n,k,fact[NMAX],cat,rest;
ll rez;
inline ll lgput(int baza,int exp)
{
	ll act=baza,act2=1;
	while (exp)
	{
		if (exp & 1)
			act2=(act2*act)%MOD;
		act=(act*act)%MOD;
		exp>>=1;
	}
	return act2;
}
int main()
{
	freopen("kperm.in","r",stdin);
	freopen("kperm.out","w",stdout);
	scanf("%d%d",&n,&k);
	int i;
	fact[0]=1;
	for (i=1; i<=n; i++)
	{
		fact[i]=fact[i-1]*i;
		if (fact[i]>=MOD) fact[i]%=MOD;
	}
	cat=n/k+1; rest=n%k;
	rez=(fact[rest]*lgput(fact[cat],rest))%MOD;
	rez=(rez*fact[k-rest])%MOD;
	rez=(rez*lgput(fact[cat-1],k-rest))%MOD;
	printf("%lld\n",rez);
	return 0;
}