多项式的求逆、取模和多点求值学习小记
-
最近學(xué)習(xí)了多項(xiàng)式的求逆、取模和多點(diǎn)求值,這些方法能夠解決很多多項(xiàng)式問(wèn)題。
-
這三個(gè)操作是環(huán)環(huán)相扣的,很有趣,學(xué)完后不妨記錄一下。
多項(xiàng)式求逆
-
給出一個(gè)次數(shù)界為 nnn 的多項(xiàng)式 A(x)A(x)A(x) ,需要求 B(x)B(x)B(x) 滿足: A(x)B(x)≡1(modxn)A(x)B(x)\equiv1(mod\ x^n)A(x)B(x)≡1(mod?xn)
-
我們考慮倍增來(lái)求解,假設(shè)我們已經(jīng)知道 G(x)G(x)G(x) 滿足:A(x)G(x)≡1(modx?n2?)A(x)G(x)\equiv1(mod\ x^{\lfloor\frac{n}{2}\rfloor})A(x)G(x)≡1(mod?x?2n??)
-
那么開始推導(dǎo),兩式相減:B(x)?G(x)≡0(modx?n2?)B(x)-G(x)\equiv0(mod\ x^{\lfloor\frac{n}{2}\rfloor})B(x)?G(x)≡0(mod?x?2n??)
-
兩邊平方:B(x)2+G(x)2?2G(x)B(x)≡0(modxn)B(x)^2+G(x)^2-2G(x)B(x)\equiv0(mod\ x^n)B(x)2+G(x)2?2G(x)B(x)≡0(mod?xn)
-
兩邊同乘 A(x)A(x)A(x) :B(x)+A(x)G(x)2?2G(x)≡0(modxn)B(x)+A(x)G(x)^2-2G(x)\equiv0(mod\ x^n)B(x)+A(x)G(x)2?2G(x)≡0(mod?xn)
-
于是可求得 B(x)B(x)B(x) :B(x)≡2G(x)?A(x)G(x)2(modxn)B(x)\equiv2G(x)-A(x)G(x)^2(mod\ x^n)B(x)≡2G(x)?A(x)G(x)2(mod?xn)
-
當(dāng)遞歸至 n=1n=1n=1 時(shí)則有:B(0)=A(0)?1B(0)=A(0)^{-1}B(0)=A(0)?1
-
那么我們開始時(shí)就次數(shù)界 nnn 配成 2k2^k2k 的形式,直接做倍增即可完成求逆。
-
時(shí)間復(fù)雜度 O(nlogn)O(n\ log\ n)O(n?log?n) 。
-
模板題:洛谷 P4238 【模板】多項(xiàng)式求逆
多項(xiàng)式取模
-
多項(xiàng)式取模是依賴于多項(xiàng)式求逆的。
-
給出一個(gè)次數(shù)為 nnn 的多項(xiàng)式 A(x)A(x)A(x) ,一個(gè)次數(shù)為 m(m≤n)m(m\leq n)m(m≤n) 的多項(xiàng)式 B(x)B(x)B(x)。
-
我們需要求出多項(xiàng)式 C(x)C(x)C(x) 和 R(x)R(x)R(x) 滿足:A(x)=B(x)C(x)+R(x)(?)A(x)=B(x)C(x)+R(x)\ \ \ \ \ \ (*)A(x)=B(x)C(x)+R(x)??????(?)
-
其中 C(x)C(x)C(x) 的次數(shù) ≤n?m\leq n-m≤n?m ,R(x)R(x)R(x) 的次數(shù) <m<m<m 。
-
考慮一個(gè)翻轉(zhuǎn)操作:AR(x)=xnA(1x)A^R(x)=x^nA(\frac{1}{x})AR(x)=xnA(x1?)
-
其實(shí)質(zhì)就是多項(xiàng)式的系數(shù)翻轉(zhuǎn)過(guò)來(lái)。
-
將 (?)(*)(?) 式兩邊同乘 xnx^nxn 、并令 x=1xx=\frac{1}{x}x=x1? 代入,可得:xnA(1x)=xmB(1x)?xn?mC(1x)+xn?m+1xm?1R(1x)x^nA(\frac{1}{x})=x^mB(\frac{1}{x})·x^{n-m}C(\frac{1}{x})+x^{n-m+1}x^{m-1}R(\frac{1}{x})xnA(x1?)=xmB(x1?)?xn?mC(x1?)+xn?m+1xm?1R(x1?)
-
則有:AR(x)=BR(x)CR(x)+xn?m+1RR(x)A^R(x)=B^R(x)C^R(x)+x^{n-m+1}R^R(x)AR(x)=BR(x)CR(x)+xn?m+1RR(x)
-
關(guān)鍵一步來(lái)了,把上式放在 (modxn?m+1)(mod\ x^{n-m+1})(mod?xn?m+1) 下,就能消除 RR(x)R^R(x)RR(x) 的影響(并且對(duì) CR(x)C^R(x)CR(x) 無(wú)影響,其每一項(xiàng)次數(shù)都 ≤n?m\leq n-m≤n?m):AR(x)≡BR(x)CR(x)(modxn?m+1)A^R(x)\equiv B^R(x)C^R(x)\ \ (mod\ x^{n-m+1})AR(x)≡BR(x)CR(x)??(mod?xn?m+1)
-
于是我們通過(guò)多項(xiàng)式求逆可以算出 CR(x)C^R(x)CR(x) :CR(x)≡AR(x)BR(x)(modxn?m+1)C^R(x)\equiv \frac{A^R(x)}{B^R(x)}\ \ (mod\ x^{n-m+1})CR(x)≡BR(x)AR(x)???(mod?xn?m+1)
-
之后翻轉(zhuǎn)得到 C(x)C(x)C(x) ,回代 (?)(*)(?) 式求出 R(x)R(x)R(x) 即可!
-
以上各操作均是 O(nlogn)O(n\ log \ n)O(n?log?n) 的。
-
模板題:洛谷 P4512 【模板】多項(xiàng)式除法
多項(xiàng)式多點(diǎn)求值
-
多點(diǎn)求值需要用到多項(xiàng)式取模!
-
給出一個(gè) nnn 次多項(xiàng)式 F(x)F(x)F(x) ,和 mmm 個(gè)值 x1,x2,???,xmx_1,x_2,···,x_mx1?,x2?,???,xm? ,要求 F(x1),F(x2),???,F(xm)F(x_1),F(x_2),···,F(x_m)F(x1?),F(x2?),???,F(xm?) 。
-
比較關(guān)鍵的一個(gè)性質(zhì):F(x)mod(x?a)=F(a)F(x)\ mod\ (x-a)=F(a)F(x)?mod?(x?a)=F(a)
-
用因式定理或者直接將 (x?a+a)k(x-a+a)^k(x?a+a)k 二項(xiàng)式展開都能很容易得到。
-
那么我們依據(jù)這個(gè)來(lái)分治解決本問(wèn)題。
-
令 L(x)=∑i=1?n2?(x?xi)L(x)=\sum_{i=1}^{\lfloor\frac{n}{2}\rfloor}(x-x_i)L(x)=∑i=1?2n???(x?xi?) ,R(x)=∑i=?n2?+1n(x?xi)R(x)=\sum_{i=\lfloor\frac{n}{2}\rfloor+1}^{n}(x-x_i)R(x)=∑i=?2n??+1n?(x?xi?) ,
-
那么對(duì)于 1≤i≤?n2?1\leq i\leq\lfloor\frac{n}{2}\rfloor1≤i≤?2n?? ,F(xi)=(FmodL)(xi)F(x_i)=(F\ mod\ L)(x_i)F(xi?)=(F?mod?L)(xi?) ;對(duì)于 ?n2?+1≤i≤n\lfloor\frac{n}{2}\rfloor+1\leq i\leq n?2n??+1≤i≤n ,F(xi)=(FmodR)(xi)F(x_i)=(F\ mod\ R)(x_i)F(xi?)=(F?mod?R)(xi?)。(原理同上述性質(zhì))
-
于是我們向線段樹一樣往下分治計(jì)算即可。
-
具體來(lái)說(shuō)就是先預(yù)處理出每個(gè)區(qū)間的 ∏i=lr(x?xi)\prod_{i=l}^r(x-x_i)∏i=lr?(x?xi?) (相當(dāng)于是求出 L,RL,RL,R ,自下而上),
-
之后再自上而下地把 F(x)F(x)F(x) 往下傳,每次就模 LLL 或 RRR 并分別傳向左右子區(qū)間。
-
當(dāng)分治到底層(l=rl=rl=r)的時(shí)候,F(x)F(x)F(x) 就是被模剩一個(gè)常數(shù)項(xiàng) F′(0)F'(0)F′(0) 了,直接就有 F(xi)=F′(0)F(x_i)=F'(0)F(xi?)=F′(0) 。
-
每次做多項(xiàng)式取模是 O(nlogn)O(n\ log\ n)O(n?log?n) 的,套上分治就是 O(nlog2n)O(n\ log^2n)O(n?log2n) 的了。當(dāng)然常數(shù)很大……
-
模板題:洛谷 P5050 【模板】多項(xiàng)式多點(diǎn)求值
-
這里給出這題的代碼:
總結(jié)
以上是生活随笔為你收集整理的多项式的求逆、取模和多点求值学习小记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JZOJ 5987. 【WC2019模拟
- 下一篇: JZOJ 6030. 【GDOI2019