Lucas定理

用於求_{n}^{m}\textrm{C} %p

ll mod_pow(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1) res =res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}
ll comb(ll n, ll k)
{
    if(k > n) return 0;
    ll ret = 1;
    k = min(n - k, k);
    for(int i = 1; i <= k; i++)
    {
        ll a = (n + i - k) % mod;
        ll b = i % mod;
        ret = ret * (a * mod_pow(b, mod - 2) % mod) % mod;
    }
    return ret;
}
ll Lucas(ll n, ll k)
{
    if(k == 0) return 1;
    return comb(n % mod, k % mod) * Lucas(n / mod, k / mod) % mod;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章