hdu4828卡兰特数列逆元

卡兰特数列:递推公式: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 
#include 
#include 
#include 
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]);
    }
}


你可能感兴趣的:(逆元/费马小定理,卡兰特)