1. 程式人生 > >[學習筆記]多項式的整除、取模、多點求值和插值及常係數線性遞推

[學習筆記]多項式的整除、取模、多點求值和插值及常係數線性遞推

一、開頭

( WC2019 神犇協會)
undefeatedKO : NOI2017 的題大家都 AK 了嗎?
All : AK 了!
ION :我們穿越到 2019 年的 WC 怎麼樣?
olis :好啊!聽說一個弱雞 xyz32768 要來 WC ,我們一到就把他 D 一遍,這樣他 WC2019 不爆零才怪呢!
( WC2019 )
VFN :我們剛剛 A 掉了分身術這題。考慮到你比較菜,我就不用這道題考你了,我換成 Day1 T3 的泳池,如果你做不出來,你就肯定會在 WC2019 我們精心出的試題面前爆零!
xyz32768 :什麼??????
NFV :哈哈,沒想到你這麼菜呀,那我再降低下要求:我告訴你這道題的演算法是:常係數線性遞推。
xyz32768 :什麼?矩乘快速冪??????
phantom : 你這個弱雞居然連多項式整除和取模都不會,明天你爆零定了!再見!
xyz32768 : 算了,爆零就爆零吧,反正我永遠都學不會任何多項式演算法。
pool : 沒想到 xyz32768 你菜得超出我的眼界了,再見,爆零蒟蒻!

二、前置芝士:多項式求逆

多項式求逆

三、多項式的整除與取模

一個 n n 次多項式 F ( x )

F(x) m m 次多項式 G ( x ) G(x)
,求多項式 Q ( x ) Q(x) R ( x ) R(x) ,滿足:
(1) Q ( x ) Q(x) 次數為 n m n-m R ( x ) R(x) 次數為 m 1 m-1
(2) F ( x ) = Q ( x ) G ( x ) + R ( x ) F(x)=Q(x)G(x)+R(x)
這就是求 Q ( x ) Q(x) F ( x ) F(x) G ( x ) G(x) 整除得到的多項式,且 R ( x ) = F ( x )   m o d   G ( x ) R(x)=F(x)\bmod G(x)
下面進入推式子環節。
F ( 1 x ) = Q ( 1 x ) G ( 1 x ) + R ( 1 x ) F(\frac 1x)=Q(\frac 1x)G(\frac 1x)+R(\frac 1x)
兩邊同乘 x n x^n
F R ( x ) = Q R ( x ) G R ( x ) + R R ( x ) x n m + 1 F_R(x)=Q_R(x)G_R(x)+R_R(x)x^{n-m+1}
其中 F R ( x ) F_R(x) 表示 F ( x ) F(x) 的係數翻轉,即 F R ( x ) F_R(x) i i 次項係數為 F ( x ) F(x) n i n-i 次項係數。
F R ( x ) Q R ( x ) G R ( x ) (   m o d   x n m + 1 ) F_R(x)\equiv Q_R(x)G_R(x)(\bmod x^{n-m+1})
Q R ( x ) F R ( x ) × G R 1 ( x ) (   m o d   x n m + 1 ) Q_R(x)\equiv F_R(x)\times G^{-1}_R(x)(\bmod x^{n-m+1})
需要求 G R ( x ) G_R(x) n m + 1 n-m+1 的逆。
至此,我們得到了整除的結果。
取模則更簡單:
R ( x ) = F ( x ) Q ( x ) G ( x ) R(x)=F(x)-Q(x)G(x)
多項式取模的重要應用:如果在一定的條件下 G ( x ) G(x) 0 0 ,那麼將計算 F ( x ) F(x) 改為計算 F ( x )   m o d   G ( x ) F(x)\bmod G(x) 有時可以有效地降低複雜度。

四、應用:多項式多點求值

給定一個 n n 次多項式 F ( x ) F(x) m m 個值 x 1 , x 2 , , x m x_1,x_2,\dots,x_m ,求出 F ( x 1 ) F(x_1) F ( x 2 ) F(x_2) \dots F ( x m ) F(x_m)
採用分治的演算法。取 m i d = m 2 mid=\lfloor\frac m2\rfloor
先計算