盧卡斯 Lucas 定理 逆元 求組合數

2021-08-22 19:23:43 字數 788 閱讀 8256

參考文章:

lucas定理是用來求 c(n,m) mod p,p為素數的值。

lucas定理:我們令n=sp+q , m=tp+r.(q ,r ≤p)

那麼:(在程式設計時你只要繼續對

呼叫lucas定理即可。

**可以遞迴的去完成這個過程,其中遞迴終點為t = 0

時間o(logp(n)*p):)

ll lucas(ll a,ll b)

}" class="mathcode" src=""/>

那麼我們先預處理階乘並求模

#include#include#includeusing namespace std;

typedef long long ll;

#define mod 1000000007

ll jc[1000];

void init()

ll fastpow(ll a,ll n,ll p) ///快速冪 a^n%p

return ans;

}ll niyuan(ll a,ll b) ///費馬小定理求逆元

ll c(ll a,ll b) ///計算c(a,b)

ll lucas(ll a,ll b) ///lucas定理求組合數模

int main()

return 0;

}

盧卡斯 Lucas 定理

之前有寫過一篇部落格是求組合數 取模 的兩種方法。那篇文章裡介紹的方法其實也還有侷限性,pascal打表由於記憶體的限制一般只用於求取1000以內的組合數,而使用逆元套公式的方法其實也只適用於求取的組合數 c n,m p中,n 和 m均不大於要求的模數 p 這樣就導致了乙個很尷尬的問題 如果要求取的...

盧卡斯(Lucas)定理

c nm modp cn pm p cnm odpm modp modp c n m mod p c times c mod p cnm mo dp c n pm p cnmo dpmm odp modp p為素數 int qpow ll b,int n,int mod return res int...

盧卡斯定理Lucas

在數論中,lucas 定理用於快速計算 c m n p 即證明 c m n prod kc 其中 m i 為 m 的因式分解,n i 為 n 的因式分解,p 為質數。由 edward lucas 在1878年提出。證明 首先我們將 c i p 進行一下變式即 c i j frac 提出來乙個 fra...