Lucas定理詳解


這篇博客是從另一位園友那里存的,但是當時忘了寫原文的地址,如果有找到原文地址的請評論聯系!

Lucas定理解決的問題是組合數取模。數學上來說,就是求 \(\binom n m\mod p\)。(p為素數)

這里\(n,m\)可能很大,比如達到\(10^{15}\),而\(p\)\(10^9\)以內。顯然運用常規的階乘方法無法直接求解,所以引入Lucas定理。

Lucas定理

\(n\)\(m\)寫成\(p\)進制數的樣子(如果長度不一樣把短的補成長的那個的長度):
\(n=(a0a1…ak)p\)
\(m=(b0b1…bk)p\)

那么:
\(\binom n m \equiv \prod _{i=0}^k \binom {a_i} {b_i} \mod p\)

證明
如果把Lucas定理從遞歸的角度理解,它其實是這樣的:
\(n=ap+b,m=cp+d,(b,d<p,a=\lfloor\frac{n}{p}\rfloor,c=\lfloor \frac{m}{p}\rfloor) \\ \binom n m \equiv \binom a c * \binom b d\)

這個定理的一個很巧妙的證法是通過二項式定理來說明上面的式子是成立的。

首先,對於任意質數\(p\),有:
\((1+x)^p\equiv 1+x^p\mod p\)

其證明可以由費馬小定理\((x^p \equiv x \mod p) |p為素數)\)直接得出:
\((1+x)^p\equiv 1+x\)
\(x^p\equiv x\)
所以\((1+x)^p\equiv 1+x \equiv 1+x^p\)

(當然同樣也有\((a+b)^p\equiv a^p+b^p \mod p\),具體為什么你可以拆開前面的式子,將其除 \(a^p\)\(b^p\) 項外的所有項的系數好好研究一下(其實就是楊輝三角的第p層),可以發現把對稱項系數分別合並后都能整除\(p\)

利用這個性質,我們證明Lucas定理:
\(\begin{aligned} (1+x)^n&=(1+x)^{\lfloor \frac{n}{p}\rfloor *p}(1+x)^b \\ &=(1+x^p)^{\lfloor \frac{n}{p}\rfloor}(1+x)^b \\ &=\sum _{i=0}^k\binom {\lfloor \frac{n}{p}\rfloor} ix^{pi}\sum _{j=0}^k\binom b jx^j \end{aligned}\)

考察等式左右兩邊xmxm的系數,可以發現:
\(\begin{aligned} 左邊&=\binom n m \\ 右邊&=\binom {\lfloor \frac{n}{p}\rfloor} i\binom b j,(pi+j=m,j<p) \\ &=\binom {\lfloor \frac{n}{p}\rfloor} {\lfloor \frac{m}{p}\rfloor} \binom b d \end{aligned}\)

所以上面的式子成立,證明完畢。

如果不算預處理什么的,算法時間復雜度為\(O(log_pn)\)。如果能夠支持預處理,那么就加一個\(O(p)\),要不就用快速冪,乘上\(O(logp)\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM