Cod sursa(job #451546)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 9 mai 2010 18:16:28
Problema Kperm Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

#define file_in "kperm.in"
#define file_out "kperm.out"

long long n,k;

#define mod 666013

void citire()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%lld %lld", &n, &k);
}

inline long long putere(long long a,long long b)
{
	if (b==0)
		return 1;
	if (b%2==0)
	{
		long long x=putere(a,b/2);
		return (x%mod)*(x%mod);
	}
	else
	{
		long long x=putere(a,b/2);
		return ((x%mod)*(x%mod)*a)%mod;
	}
}

	

void solve()
{
	long long c=n/k;
	long long r=n%k;
	
	long long i,suma=1;
	long long p;
	
	if (k%2==1)
	{
	p=1;
    for (i=2;i<=r;++i)
		 p=(p*i)%mod;
	suma=(suma*p)%mod;
	p=1;
	for (i=2;i<=k-r;++i)
		p=(p*i)%mod;
	suma=(suma*p)%mod;
	p=1;
	for (i=2;i<=c+1;++i)
		 p=(p*i)%mod;
	p=putere(p,r);
	p%=mod;
	suma=(suma*p)%mod;
	p=1;
	for (i=2;i<=c;++i)
		 p=(p*i)%mod;
	p=putere(p,k-r);
	p%=mod;
	suma=(suma*p)%mod;
	printf("%lld", suma);
	}
	else
		printf("0\n");
	
}

int main()
{
	citire();
	solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}