Lucas(盧卡斯)定理

2022-10-08 19:12:18 字數 2308 閱讀 5062

若 \(p\) 為質數,且\(a\ge b\ge1\),則有:

\[c_^\equiv c_^\cdot c_^

\]按照 \(p\) 進製拆分 \(a\) 與 \(b\) ,設 \(a\) 與 \(b\) 是 \(k\) 位,不足用 \(0\) 補足。

\[\left\

a&=a_0p^+a_1p^+\cdots+a_p^+a_kp^\\

b&=b_0p^+b_1p^+\cdots+b_p^+b_kp^

\end\tag

\right.

\]根據二項式定理有:

\[\begin

(1+x)^p&=c_p^0x^0+c_p^1x^1+c_p^2x^2+\cdots+c_p^x^+c_p^px^p\\

&=1+c_p^1x+c_p^2x^2+\cdots+c_p^x^+x^p\\

\end

\]\(\because p為質數\therefore1\sim p-1均與p互質\\\therefore c_p^2,c_p^3,\cdots,c_p^均能整除p,即c_p^2,c_p^3,\cdots,c_p^\,mod\,p=0\)

\[(1+x)^p\equiv(1+x^p)\,mod\,p\tag

\]即 \((1+x)^p\) 在模 \(p\) 的意義下與 \((1+x^p)\) 同餘。

設 \(a=\lfloor \frac\rfloor p+a\%p\),\(a'=\lfloor \frac\rfloor\) 有:

\[\begin

(1+x)^a&=(1+x)^\rfloor p+a\%p}\\

&=(1+x)^\\

&=(1+x)^(1+x)^\\

\because a\%p=a_0

\therefore &=(1+x)^(1+x)^\\

&=\underline}(1+x)^\\

\because公式(2)

\therefore &=\underline(1+x)^}

\end\tag

\]再設 \(a'=\lfloor \frac\rfloor p+a'\%p\),\(a''=\lfloor \frac\rfloor\) 有:

\[\begin

((1+x)^p)^&=(1+x^p)^\rfloor p+a'\%p}\\

&=(1+x^p)^\\

&=(1+x^p)^((1+x)^p)^\\

\because a'\%p=a_1

\therefore &=(1+x^p)^((1+x)^p)^\\

&=\underline((1+x)^p)^}\\

\because公式(2)

\therefore &=\underline)^(1+x^p)^}

\end\tag

\]同理,可得到:

\[(1+x^)^=(1+x^)^\underline)^}

\]這樣經過不斷的迭代,最終得到:

\[(1+x)^a=(1+x^)^*(1+x^})^}

*\cdots*(1+x^p)^*(1+x)^\tag

\]等式兩邊運用二項式分別求 \(c_a^bx^b\) ,右邊可以看作 \(b\) 個球分到了 \(k\)個 盒子裡,每個盒子裡面得數量就是 \(b_i(1\le i\le k)\) 得:

\[\begin

c_a^bx^b&=c_^x^c_}^}\,x^\,b_}\cdots c_^x^c_^x^\\

&=(\prod_^k^})(x^^})\\

\because 公式(1)中b的展開式

\therefore &=(\prod_^k^})x^b\\

\end

\]等式兩邊同時消去 \(x^b\) ,得:

\[c_a^b\,mod\,p\equiv \prod_^^}\tag

\]根據遞迴的過程,也可寫成:

\[c_a^b\,mod\,p=c_^c_^\tag

\]下面以acwing 887. 求組合數 iii為例:傳送門

#include #include #include using namespace std;

typedef long long ll;

const int n = 100010;

int n;

int p;

int qmi(int a, int b)

return res;

}int c(int a, int b)

return res;

}int lucas(ll a, ll b)

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...