Cod sursa(job #164538)

Utilizator ProtomanAndrei Purice Protoman Data 24 martie 2008 14:11:56
Problema Sandokan Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <stdio.h>
#include <math.h>
#define rt 2000003
#define mx 5010
long n,k;
long r;
long v[mx];

void descomp(long nr, long ct)
{
	int ok,x;
	for (int i=2; i<=nr; i++)
	{
		x=i;
		ok=0;
		for (int j=2; j<=sqrt(i); j++)
			if (i%j==0)
				ok=1;
		if (ok==0)
			while (x<=nr)
			{
				v[i]=v[i]+ct*(nr/x);
				x=x*i;
			}
	}
}

int main()
{
	freopen("sandokan.in","r",stdin);
	freopen("sandokan.out","w",stdout);
	scanf("%ld %ld",&n,&k);
	int cn=n;
	while (cn>=k)
		cn=cn-k+1;
	descomp(n-1,1);
	descomp(cn-1,-1);
	descomp((n-cn),-1);
	r=1;
	for (int i=1; i<=n; i++)
			for (int j=1; j<=v[i]; j++)
				r=(r*i)%rt;
	printf("%ld",r);
	fclose(stdin);
	fclose(stdout);
	return 0;
}