卡特兰数的性质
卡特兰数有一些优美的性质,如
通项公式一 Cn=1n+1Cn2n=Cn2n−Cn−12n;
通项公式二 Cn=1n+1∑i=0n(Cin)2;
递推公式一 Cn+1=2(2n+1)n+2Cn,且C0=1;
递推公式二 Cn+1=∑i=0nCiCn−i,且C0=1;
增长速度 ΔCn∼4nn32π√.
#include<cstdio>
#include<cstring>
#define MOD 1000000007
using namespace std;
long long inv[1000010],c[1000010],d[1000010];
void init()
{
inv[1]=1;
for(int i=2;i<1000010;i++)
inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD ;
d[0]=d[1]=1;
for(int i=2;i<500010;i++)
d[i]=d[i-1]*(4*i-2)%MOD *inv[i+1]%MOD;
}
int main()
{
init();
int T,n;
scanf("%d",&T);
while(T--)
{
long long res=0;
scanf("%d",&n);
c[0]=1;
for(int i=1;i<=n;i++)
c[i]=c[i-1]*(n-i+1)%MOD * inv[i] %MOD;
for(int i=0;i<=n/2;i++)
res=(res+d[i]*c[2*i])%MOD;
printf("%lld\n",res);
}
}
本文介绍了卡特兰数的基本性质,包括其通项公式、递推公式及其增长速度,并提供了一种使用C++实现卡特兰数计算的方法。
1万+

被折叠的 条评论
为什么被折叠?



