盧卡斯定理 Lucas

2022-07-23 04:27:11 字數 1790 閱讀 6237

當 p 為質數,\(1 \le m \le n\) 時,求組合數\(c_^ \bmod\)。

對於質數 p, 有:

\[\begin

c_^ \equiv c_^ \cdot c_}^} \pmod

\end

\]其中\(n / p\) 和 \(m / p\) 為整除。

引理1:

\[\begin

c_^ \equiv \frac \cdot c_^ \equiv 0 \pmod

\end

\]引理1證明:

\[\begin

c_^ = \frac = \frac \cdot \frac

\end

\]得證。

引理2:

\[\begin

(1 + x)^p \equiv 1 + x^p \pmod

\end

\]引理2證明:(二項式定理)

\[\begin

(1 + x)^p = c_p^0 + c_p^1 \cdot x + ... + c_p^p \cdot x^p

\end

\]從第二項到倒數第二項都可以在模 p 意義下消掉,只剩下第一項和最後一項,得證。

lucas定理:

令 \(n = s \cdot p + q, m = t \cdot p + r\), 則\(s = \left \lfloor \frac \right \rfloor, t = \left \lfloor \frac \right \rfloor\)。

\[\begin

(1 + x)^n = [(1 + x)^p]^s \cdot (1 + x)^q \equiv (1 + x^p) ^ s \cdot (1 + x) ^ q \equiv \sum_^ (c_s^i \cdot x^) \cdot \sum_ ^ q (c_^ \cdot x^j) \pmod \qquad (1)

\end

\]又因為:

\[\begin

(1 + x) ^ n = (1 + x)^ = \sum_ ^ c_ ^ \cdot x^k \qquad (2)

\end

\]因為 \((1) \equiv (2) \pmod\) , 對比其中的 \(x^\)項:

\[\begin

c_ ^ \cdot x ^ \equiv c_s^t \cdot x^ \cdot c_q^ r \cdot x^r \pmod

\end

\]\[\begin

c_ ^ \equiv c_s^t \cdot c_q^ r \pmod

\end

\]\[\begin

c_^ \equiv c_^ \cdot c_}^} \pmod

\end

\]得證。

於是可以遞迴求解。

cpp:

lld powe(lld a, lld b, lld p) 

return base;

}lld comb(lld n, lld m, lld p)

return (cn * powe(cm, p - 2, p)) % p;

}lld lucas(lld n, lld m, lld p)

return ans % p;

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