Cod sursa(job #638853)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 21 noiembrie 2011 19:32:56
Problema Dirichlet Scor 88
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb

#include <fstream>
#include <cstdio>

using namespace std;

#define m 9999991

typedef long long I64;

I64 n,f[2000001],sol;

void read ()
{
	ifstream in ("dirichlet.in");
	in>>n;
}

I64 put (I64 x,I64 y)
{
	I64 rz=1;
	for(;y;y>>=1)
	{
		if(y&1)
			rz=(rz*x)%m;
		x=(x*x)%m;
	}
	return rz;
}

I64 comb (I64 x,I64 y){
	return (((f[x]*put(f[x-y],m-2))%m)*put(f[y],m-2))%m;}

void solve ()
{
	f[0]=1;
	int nn=(n<<1);
	for(int i=1;i<=nn;++i)
		f[i]=(f[i-1]*i)%m;
	sol=comb(n<<1,n)-comb(n<<1,n+1);
	if(sol<0)
		sol+=m;
}

void out ()
{
	freopen ("dirichlet.out","w",stdout);
	printf("%lld",sol);
}

int main ()
{
	read ();
	solve ();
	out ();
	return 0;
}