码迷,mamicode.com
首页 > 编程语言 > 详细

大数组合数

时间:2018-01-27 15:19:50      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:ret   alt   class   UI   assert   技术分享   gif   分享   const   

 

使用前先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

 

大数组合数

标签:ret   alt   class   UI   assert   技术分享   gif   分享   const   

原文地址:https://www.cnblogs.com/wethura/p/8365612.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!