组合数板子

递推打表和log求单一

#include<iostream>
const int maxn=1e3+10;
const int mod=1e9+7;
typedef long long ll;
using namespace std;
ll  C[maxn][maxn];
void zuhe_nn()
{
    for(int i=0;i<maxn;i++)
        for(int j=0;j<=i;j++)
        {
            if(j==0||j==i)
                C[i][j]=1;
            else
                C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
        }
}
ll quick(ll a,ll b,ll m)
{
    ll ans=1;
    while(b>0)
    {
        if(b&1)
            ans=ans*a%m;
        a=a*a%m;
        b>>=1;
    }
    return ans;
}
ll jiecheng[maxn];
void ini_zuhelogn()
{
    jiecheng[0]=1;
    for(int i=1;i<maxn;i++)
    {
        jiecheng[i]=jiecheng[i-1]*i%mod;
    }
}
ll zuhe_logn(int m,int n)
{
    if(jiecheng[0]!=1)
        ini_zuhelogn();
    ll ans=((jiecheng[m]*quick(jiecheng[n], mod-2, mod))%mod)*quick(jiecheng[m-n], mod-2, mod)%mod;
    return ans;
}
原文地址:https://www.cnblogs.com/King-of-Dark/p/12608236.html