額,前兩天剛講了資料結構,今天我來講講組合數學中的一種奇妙優化——lucas
先看這樣乙個東西
沒學過lucas的肯定會說:還不簡單?處理逆元,邊乘邊膜唄
是,可以,但注意一下資料範圍
你算這一次,你需要跑25000下
那麼你如果求c199999 1~c199999 52222 呢?
你會發現你的複雜度上天了
所以我們會用到乙個神奇的定理:lucas定理
定理內容如下:
lucas(n,m,p)=c(n%p,m%p)*lucas(n/p,m/p,p)
不好玩,是嗎?
那麼我來證明一下
由二項式定理可得,cmn等於(x+1)^m中n次項的係數
那麼我們按lucas展開
原式=(x+1)^(p^k*ak)*(x+1)^(p^(k-1)*a(k-1))*……*(x+1)^(p*a1)+(x+1)^(1*a0)
=[(x+1)^(p^k)]^ak……
由費馬小定理可知,其%p後可轉化為 (x+1)^ak*(x+1)^a(k-1)*……*(x+1)^a1*(x+1)^a0
原題轉化為求上式的n次項的係數
同理,由於每一項已經消去了p^k次方 故即求每一項中的bk次項係數 即為lucas
以前的組合數,我們一位一位地算(累死了)
現在的組合數,我們只用算%p出來的(這不就是log p m次嗎?)
o(n)到o(logn)
大有長進啊
大家應該都會
下面看幾道好題
裸的板子,不說什麼
帶了預處理階乘的lucas
lucas合併
禮物,古代豬文
擴充套件lucas
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定...
Lucas定理的理解與應用
lucas定理 用於計算組合數模除素數後的值,其實就是把 n,m 分別表示為p進製,累乘各位的可能取的個數,得到最終的結果 推論 n m m則c n,m 為奇數 即c n,m 2 1,即m二進位制的每一位n都必須為1,所以n m m 應用 題意 問c n,0 c n,1 c n,n 中有多少個為奇數...
數學 Lucas定理
lucas定理解決的一類問題是c n,m p,其中n和m很大的情況 顯然如果n和m在1e7的範圍內,我們可以很輕鬆的預處理o p o 1 得到c n,m p 那麼n和m很大的時候就可以靠lucas定理了 lucas定理 c n,m p c n p,m p c n p m p p 這樣就可以把n,m很...