一種快速求組合數的方法

2022-07-02 11:18:12 字數 723 閱讀 1355

介紹一種快速求 \(\dbinom\) 的方法。

其實就是根據定義來做的做法

我們知道 \(\dbinom \mod (1e9+7)=\frac \mod (1e9+7)\)。

為方便表達,我們設 \(x=n\times (n-1)\times\dots\times(n-m+1)\) (即右邊的分子),\(y=1\times 2\times\dots\times m\) (即右邊的分母)。

然後就有

\[\dbinom \mod (1e9+7)=\frac \mod (1e9+7)

\]由費馬小定理得

\[y \times y^ \mod (10^9 + 7) = 1

\]兩邊同時乘上 \(y^\) 得

\[y^ \mod (10^9+7)=y^

\]因為 \(y^\) 是 \(y\) 的逆元,所以就有

\[\frac \mod(10^9+7) = x \times y^ \mod (10^9+7)

\]**實現起來也不難。

inline ll qpow(ll a, ll b) //快速冪,用於求逆元

return res % mod;

}inline ll work(int n, int m) //求 c(n, m)

p.s. 部分參考自 atcoder beginner contest 156 d題題解

組合數 求組合數的幾種方法總結

求c n,m mod的方法總結 1.當n,m都很小的時候可以利用楊輝三角直接求。c n,m c n 1,m c n 1,m 1 2.利用乘法逆元。乘法逆元 a b mod a b mod 2 mod為素數。逆元可以利用擴充套件歐幾里德或尤拉函式求得 1 擴充套件歐幾里德 b x p y 1 有解,x...

求組合數C n,m 的三種方法

一.暴力法 複雜度o n 適用 小資料,n 60可用 f 0 0 1 for int i 1 i n i for int j 0 j i j if j f i j f i 1 j f i 1 j 1 else f i j f i 1 j 二.逆元法 複雜度o nlog n 適用 m小於p 思路 把除...

一種遞推組合數字首和的Trick

記錄一下一種推組合數字首和的方法 設 sum m c n i s n,m s 是可以遞推的 就是加上最末尾的一項 s n,m 可以看做是楊輝三角上的一行,而 s n 1,m 是他的下一行 考慮組合數的遞推公式,除了 c n m 這一項之外都會被計算兩次 另外如果有多組詢問的話可以用莫隊實現 incl...