Pagini recente » Cod sursa (job #130980) | Cod sursa (job #516221) | Cod sursa (job #458684) | Cod sursa (job #672366) | Cod sursa (job #717206)
Cod sursa(job #717206)
#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 Combinari_de_2N_luate_cate_N()
{
long long i,N2Fact=1,NFact=1,invNFact=0,aux=0,Final;
for(i=2;i<=N;i++)
{
NFact*=i;
NFact%=MOD;
N2Fact*=i;
N2Fact%=MOD;
}
for(i=N+1;i<=N2;i++)
{
N2Fact*=i;
N2Fact%=MOD;
}
InversModular(NFact,MOD,invNFact,aux);
invNFact%=MOD;
if(invNFact<0)
invNFact+=MOD;
Final=N2Fact*invNFact;
Final%=MOD;
Final*=invNFact;
Final%=MOD;
return Final;
}
inline long long Combinari_de_2N_luate_cate_N_minus1()
{
long long i,N2Fact=1,NFact1=1,NFact2=1,invNFact1=0,invNFact2=0,aux=0,Final;
for(i=2;i<N;i++)
{
NFact1*=i;
NFact1%=MOD;
NFact2*=i;
NFact2%=MOD;
N2Fact*=i;
N2Fact%=MOD;
}
for(i=N;i<=N+1;i++)
{
NFact2*=i;
NFact2%=MOD;
N2Fact*=i;
N2Fact%=MOD;
}
for(i=N+2;i<=N2;i++)
{
N2Fact*=i;
N2Fact%=MOD;
}
InversModular(NFact1,MOD,invNFact1,aux);
aux=0;
InversModular(NFact2,MOD,invNFact2,aux);
invNFact1%=MOD;
if(invNFact1<0)
invNFact1+=MOD;
invNFact2%=MOD;
if(invNFact2<0)
invNFact2+=MOD;
Final=N2Fact*invNFact1;
Final%=MOD;
Final*=invNFact2;
Final%=MOD;
return Final;
}
inline long long Catalan()
{
long long Final;
Final=termen1-termen2;
if(Final<0)
Final+=MOD;
return Final;
}
inline void Afisare()
{
ofstream fout("dirichlet.out");
fout<<sol<<"\n";
fout.close();
}
int main()
{
Citire();
termen1=Combinari_de_2N_luate_cate_N();
termen2=Combinari_de_2N_luate_cate_N_minus1();
sol=Catalan();
Afisare();
return 0;
}