Lucas定理以及證明

2022-06-19 18:51:10 字數 1281 閱讀 6056

對著無數篇部落格終於\(yy\)懂了\(lucas\)定理,興奮之際趕緊寫下來

如果\(p\)是質數,那麼\(c_^\equiv c_^\times c_^(mod\ p)\)

首先我們要知道乙個性質:

如果\(p\)為質數,那麼有\(c_^\equiv 0(mod\ p)\),其中\(n\ne 0,p\)

這個很顯然吧,考慮把組合數的式子寫出來:\(c_p^n=\frac\)

把\(p\)提出來就變成了\(\frac\times p\),就證完了

這個性質有什麼用呢?別著急,我們先往下走

二項式定理得:\((x+1)^p=\sum _^c_p^i\times x^i\)

而根據上面的性質,因為\(n\)只有在等於\(0\)或\(p\)時才為\(1\),其餘時都為\(0\)得到在模\(p\)意義下

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

\]設\(n=\left \lfloor \frac \right \rfloor\times p+n\ mod \ p\)

那麼可得\((x+1)^n\equiv (x+1)^ \right \rfloor\times p}+(x+1)^(mod\ p)\)

替換得\((x+1)^n\equiv (x^p+1)^ \right \rfloor}+(x+1)^(mod\ p)\)

根據二項式定理,展開得

\[\sum_^c_n^i\times x^i\equiv \sum_^ \right \rfloor}c_ \right \rfloor}^j\times x^j+\sum_^c_^\times x^k(mod\ p)

\]觀察這個式子,我們發現對於每乙個\(i\),都一定存在\(j,k\)與其對應,保證\(x^i=x^j\times x^k\),約掉之後就是\(lucas\)了

證畢**很好寫,丟下板子題**qaq

#include #include #define int long long

using namespace std;

int t,m,n,p;

int mypow(int a,int x)

return s;

}int c(int m,int n)

int lucas(int m,int n)

signed main()

{ cin>>t;

while (t--)

{ cin>>n>>m>>p;

cout《擴充套件\(lucas\)感覺實際用途比較少,而且複雜度可能不太對,就不放了

lucas定理證明

lucas 定理 證明 a b是非負整數,p是質數。ab寫成p進製 a a n a n 1 a 0 b b n b n 1 b 0 則組合數c a,b 與c a n b n c a n 1 b n 1 c a 0 b 0 mod p 相同 即 lucas n,m,p c n p,m p lucas ...

瞎搞 Lucas定理證明

求證cn m i 0kc nimi modp 其中m ki 0mip i n ki 0nip i p是質數。首先,我們知道,n0 nmodp,m 0 mmodp 那麼原式相當於求證cn m c np mp cnmodp mmod pmodp 這樣就可以歸納一發證明整個定理了。首先我們知道,對於任意的...

Lucas定理 推導及證明

當n m為大數,p為素數時,lucas定理是用來求 c n,m mod p的 值。適用領域範圍 在數論中求大組合數取模。表示式 c n,m p c n p,m p c n p,m p p lucas定理 我們令 n sp q m tp r q r p 那麼 在程式設計時你只要繼續對 呼叫lucas定...