1. 程式人生 > >Lucas定理及應用

Lucas定理及應用

應該 .com mda 什麽 範圍 這一 CA 你會 nbsp

額,前兩天剛講了數據結構,今天我來講講組合數學中的一種奇妙優化——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)

大有長進啊

大家應該都會

下面看幾道好題

combination【bzoj2928】

裸的板子,不說什麽

《瞿葩的數字遊戲》T3-三角聖地

帶了預處理階乘的Lucas

[SHOI2015]超能粒子炮·改

lucas合並

禮物,古代豬文

擴展Lucas

Lucas定理及應用