考慮經典問題:求解\(\binom\mod p\)的值,\(p\)是質數。
這樣的問題,我們一般採用預處理階乘及階乘逆元的方式達到\(\mathcal o(1)\)查詢,但當\(n,m\)的範圍比較大,比如\(1e9\)之類的,預處理階乘顯然是不可能的了,那我們有什麼方法呢:
lucas定理:
\[\binom\equiv \binom\binom \pmod p
\]有了這個定理,實現就很簡單了,將\(\binom\)遞迴處理,將\(\binom\)用線性求逆元的方法完成,總複雜度是\(o(p+log_p(n))\),可以通過這道洛谷模板題,這道題資料範圍不知道為什麼只出到\(1e5\),預處理階乘都可以過。。。事實上\(lucas\)可以做到\(n,m\le 1e18\),只要\(p\)比較小且是質數就行了。
考慮定理的證明:
首先給出引理:
引理: 當\(p\)為質數時,滿足開始推導,假設\(n=n_0p+n_1,m=m_0p+m_1\),那麼我們需要證明得就是:\[(a+b)^p\equiv a^p+b^p\pmod p
\]考慮\(\binom \mod p\),因為\(\binom=\frac\),所以只要\(i\not=p\)且\(p-i\not=p\),這個式子一定\(=0\),因此只有在\(i=0\)或\(p\)時原式值大於\(0\)。
於是由二項式定理:
\[(a+b)^p=\sum_^\binoma^ib^\equiv \binom p0 b^p+\binom ppa^p\equiv a^p+b^p\pmod p
\]
\[\binom nm \equiv \binom\binom\pmod p
\]於是有:
\[\begin
(1+x)^n&\equiv (1+x)^\\
&\equiv (1+x)^(1+x)^\\
&\equiv [(1+x)^p]^(1+x)^\\
&\equiv (1+x^p)^(1+x)^\\
&\equiv \sum_^\binomx^\sum_^\binomx^j\pmod p
\end
\]再回到二項式定理得到\((1+x)^n\)的另一種表示式:
\[(1+x)^n=\sum_^\binomx^i\]故
\[\sum_^\binomx^i\equiv \sum_^\binomx^\sum_^\binomx^j\pmod p
\]左式的\(x^m\)次項的係數就是\(\binom\),而右式中\(n_1,因此右式中\(x^m\)只能由\(x^\times x^\)得到,係數就是
\[\binom\binom
\]因此:
\[\binom\equiv \binom\binom\pmod p
\]\(lucas\)定理得證。
Lucas定理學習筆記
equiv rfloor choose lfloor frac rfloor times mod p 此處的 表示的是取模運算。考慮化簡 frac 不難發現當n和m都遠大於p的時候為了簡化運算我們可以將n,m,n m 都給按照p分段,如果 n p geq m p 那麼可以發現以分數線為界,分數線上面...
lucas定理學習小記
lucas是數論定理,運用到oi上時,就會發現非常便利,它可以在極快的時間內算出c n,m mod p,p為質數。時間複雜度為o log 以p為底 n p lucas定理 c n,m p c n p,m p c n p,m p p 我們令n sp q m tp r q r p 那麼 在程式設計時你只...
主定理學習筆記
主定理用於求遞推方程的階。設a 1,b 1為常數,f n 為函式,t n 為非負整數,且 t n at n b f n 注意a b取值範圍 有以下三種結果 若f n o nlogba 0,則t n nlogba 若f n nlogba 則t n nlogba logn 若f n nlogba 0,且...