盧卡斯定理(Lucas定理)

blind5883發表於2024-04-29

搞懂Lucas定理!

Lucas 定理內容如下:對於質數p,有C(n, m) ≡ C(n/p,m/p) * C(n%p, m%p) (mod p)其中n/p, m/p下取整即下面的圖片
![[Pasted image 20240429091355.png]]
盧卡斯定理 - OI Wiki (oi-wiki.org)
非常的簡單啊

證明

這裡推薦一篇文章盧卡斯定理證明 - onlyblues - 部落格園 (cnblogs.com)裡面的證明非常嚴謹,這裡我採用感性的思想證明一下
這裡寫明文章中第一種證明方式

/*
因為我不會LaTeX語法,所以符號看起來會很彆扭,可以用筆寫下來看看是什麼樣
要證明C(a, b) ≡ C(a/p,b/p) * C(a%p, b%p) (mod p)其中`a/p, b/p`下取整

使用的公式
(x + y)^p ≡ x^p + y^p (mod p)
(x + y) ^ p^a ≡ x ^ p^a + y ^ p^a (mod p), p^a即p的a次方

證明
(x + y)^p 可以用二項式定理分解,其中每一項為C(p, i) * x^i * y^(p-i)
因為p是質數,所有比他小的正整數(除了1)都無法透過除的方式消去它
那麼當i在[1, p - 1]時可知C(p, i)一定可以化為p * k的形式,k為任意正整數
那麼此時C(p, i) % p = 0, 那麼C(p, i) * x^i * y^(p-i) % p = 0
所以這些項一定為0
由此可知(x + y)^p ≡ C(p, 0) * y^p + C(p, p) * x^p (mod p)
即(x + y)^p ≡ y^p + x^p (mod p)

而(x + y)^p^a ≡ x^p^a + y^p^a (mod p)可以透過同樣的方式證明這裡省去

接下來開始真正的證明

首先我們可以把C(a, b)中的a,b分解為p進位制的形式,即
a = ak*p^k + ak-1 * p^(k - 1) + ... + a0*p^0, 其中ai為非負整數
b = bk*p^k + bk-1 * p^(k - 1) + ... + b0*p^0, 其中bi為非負整數



由(x + y)^p ≡ x^p + y^p (mod p)可得
(1 + x)^p ≡ 1 + x^p (mod p)
由(x + y)^p^a ≡ x^p^a + y^p^a (mod p)可得
(1 + x)^p^a ≡ 1 + x^p^a (mod p)

因為(1 + x)^a = (1 + x)^(ak*p^k + ak-1 * p^(k - 1) + ... + a0*p^0)
= (1+x)^(ak*p^k) * (1+x)^(ak-1 * p^k-1) * ... * (1+x)^a0*p^0
≡ (1 + x^p^k)^ak * (1 + x^p^(k-1))^ak-1 * ... * (1 + x^p^0)^a0 (mod p)

即(1 + x)^a ≡ (1 + x^p^k)^ak * (1 + x^p^(k-1))^ak-1 * ... * (1 + x^p^0)^a0 (mod p) 設為(1)

我們要求C(a, b),而C(a, b)恰好等於(1 + x)^a中含x^b項的係數
而x^b = x^(bk*p^k + bk-1 * p^k-1 + ... + b0*p^0)
      = x^(bk*p^k) * x^(bk-1 * p^k-1) * ... * x^b0*p^0 設為(2)
      
這時候看看(2)中的x^(bk*p^k)和(1)中的(1 + x^p^k)^ak, 發現了什麼?
可以發現前者在後者的係數為C(ak, bk)項中
那麼就可以把這兩個聯絡起來了,類比一下
由(1)和(2)可得C(a, b) ≡ C(ak, bk) * C(ak-1, bk-1) * ... * C(a0, b0) (mod p) ,設為(3)
這時候證明就差不多了

因為
a/p = ak*p^k + ak-1 * p^(k - 1) + ... + a1*p^1
b/p = bk*p^k + bk-1 * p^(k - 1) + ... + b1*p^1,
a0 = a % p
b0 = b % p
所以把C(a, b)換成C(a/p, b/p)可發現(3)中的C(a0, b0)就沒了
於是
C(a/p, b/p) ≡ (ak, bk) * C(ak-1, bk-1) * ... * C(a1, b1) (mod p)
C(a%p, b%p) = C(a0, b0) 
那麼C(a, b) ≡ C(a/p, b/p) * C(a%p, b%p) (mod p)

證畢
*/