求C(n,m)%mod

来源:互联网 发布:淘宝问卷调查 编辑:程序博客网 时间:2024/05/21 09:12
long long pow_mod(int a,int n){    long long ans=1;    while(n)    {        if(n&1) ans=ans*a%mod;        a=a*a%mod;        n>>=1;    }    return ans;}long long C(int k,int n){    long long sum=1;    for(int i=1,j=n;i<=k;i++,j--)        sum=sum*j*pow_mod(i,mod-2)%mod;    return sum;}


O(1)

void init(){    dp[1]=1;    for(long long i=2;i<=1000000;i++)        dp[i]=dp[i-1]*i%mod;}long long pow_mod(long long a,long long n){    long long ans=1;    while(n)    {        if(n&1) ans=ans*a%mod;        a=a*a%mod;        n>>=1;    }    return ans;}long long C(long long a,long long b){    if(!b) return 1;    long long ans=dp[a];    ans=ans*pow_mod(dp[a-b],mod-2)%mod;    ans=ans*pow_mod(dp[b],mod-2)%mod;    return ans;}

Lucas

long long pow_mod(long long a,long long n){    long long ans=1;    while(n)    {        if(n&1) ans=ans*a%p;        a=a*a%p;        n>>=1;    }    return ans;}long long  C(LL n, LL m){    if(m > n) return 0;    LL ans = 1;    for(int i=1; i<=m; i++)    {        LL a = (n + i - m) % p;        LL b = i % p;        ans = ans * (a * pow_mod(b, p-2) % p) % p;    }    return ans;}LL Lucas(LL n, LL m)///C(n,m){    if(m == 0) return 1;    return C(n % p, m % p) * Lucas(n / p, m / p) % p;}


0 0
原创粉丝点击