Cod sursa(job #717234)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 19 martie 2012 19:19:05
Problema Dirichlet Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<fstream>
#define MOD 9999991
using namespace std;
long long N,N2,termen1,termen2,sol;

inline void Citire()
{
	ifstream fin("dirichlet.in");
	fin>>N; N2=2*N;
	fin.close();
}

inline void InversModular(long long A,long long B,long long &x,long long &y)
{
	if(B==0LL)
	{
		x=1LL;
		y=0LL;
		return;
	}
	InversModular(B,A%B,x,y);
	long long aux,q=A/B;
	aux=x;
	x=y;
	y=aux-y*q;
}

inline long long Catalan()
{
	long long i,A=1,B=1,inv=0LL,aux=0LL,Final;
	for(i=N+2;i<=N2;i++)
	{
		A*=i;
		A%=MOD;
	}
	for(i=2;i<=N;i++)
	{
		B*=i;
		B%=MOD;
	}
	InversModular(B,MOD,inv,aux);
	inv%=MOD;
	if(inv<0)
		inv+=MOD;
	Final=A*inv;
	Final%=MOD;
	return Final;
}

inline void Afisare()
{
	ofstream fout("dirichlet.out");
	fout<<sol<<"\n";
	fout.close();
}

int main()
{
	Citire();
	sol=Catalan();
	Afisare();
	return 0;
}