大数组合数

Posted 镂空的行尸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数组合数相关的知识,希望对你有一定的参考价值。

 

使用前先build(),之后可以直接调用C()求组合数,其中涉及逆元知识,自行移步。

 

技术分享图片
const int SIZE = 2001;
LL fac[SIZE],inv[SIZE],p;
LL mypow(LL x,LL y){
    LL res=1;
    while(y){
        if(y&1)res=res*x%p;
        y>>=1;
        x=x*x%p;
    }
    return res;
}
LL C(int x,int y){
    if(y<0||y>x)return 0;
    return fac[x]*inv[y]%p*inv[x-y]%p;
}
void build()
{
    assert(p>=SIZE);
    fac[0]=1;
    for(int i=1;i<=SIZE;i++)
        fac[i]=fac[i-1]*i%p;
    inv[SIZE-1]=mypow(fac[SIZE-1],p-2);

    for(int i=SIZE-2;i>=0;i--)
        inv[i]=inv[i+1]*(i+1)%p;
}
void ADD(LL& x,LL v){
    x=(x+v)%p;
}
View Code

 

以上是关于大数组合数的主要内容,如果未能解决你的问题,请参考以下文章

课程作业03:用递归方法计算组合数解决汉诺塔问题判断某个字符串是否回文

uva 1478 - Delta Wave(递推+大数+卡特兰数+组合数学)

求解Catalan数,(大数相乘,大数相除,大数相加)

递归(计算组合数判断回文字符串汉诺塔问题)

HDU 4927 Series 1(推理+大数)

组合数板子