卡兰特数列:递推公式:h(n)=h(n-1)*(4*n-2)/(n+1);
通项公式:h(n)=C(2n,n)/(n+1) h(n)=c(2n,n)-c(2n,n+1)
逆元打表卡兰特数列求模
#include <algorithm>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
ll h[1000005];
ll quick_pow(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1) ans=(ans*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return ans;
}
int main()
{
h[0]=1;
for(ll i=1;i<=1000000;i++)
h[i]=((h[i-1]*(4*i-2)%mod)*quick_pow(i+1,mod-2))%mod;
int t;
scanf("%d",&t);
for(int cas=1;cas<=t;cas++)
{
int n;
scanf("%d",&n);
printf("Case #%d:\n%lld\n",cas,h[n]);
}
}