組合數取模

原文鏈接:http://blog.csdn.net/wang907553141/article/details/52143128

原文參考博客:http://blog.csdn.net/acdreamers/article/details/8037918

這裏寫圖片描述

這裏寫圖片描述

下面附上Lucas定理的代碼:

const LL mod=1e9+7;
typedef long long LL;
LL n,m;
LL quickPow(LL a,LL k)
{//快速冪求a^k%mod
    LL ans=1;
    while(k)
    {
        if(k&1)//相與運算,如果k是奇數那麼結果爲真,執行下面操作
        ans=(ans*a)%mod;
        a=(a*a)%mod;
        k>>=1;
    }
    return ans;
}
LL C(LL a,LL b,LL p)
{//求從n個數中挑出m個數的組合數
    if(a<b)
      return 0;
    if(b>a-b)
      b=a-b;
    LL up=1,down=1;
    for(LL i=0;i<b;i++)
    {
        up=up*(a-i)%p;
        down=down*(i+1)%p;
    }
    return up*quickPow(down,p-2)%p;//乘法逆元(費馬小定理)
}
LL lucas(LL a,LL b,LL p)
{
    if(b==0)
        return 1;
    return C(a%p,b%p,p)*lucas(a/p,b/p,p)%p;
}

發佈了131 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章