【learning】多項式開根詳解+模板


概述

多項式開跟是一個非常重要的知識點,許多多項式題目都要用到這一算法。

用快速數論變換,多項式求逆元和倍增法可以在$O(n log n)$的時間復雜度下求出一個$n$次多項式的開根。

 

前置技能

快速數論變換(NTT),多項式求逆元,二次剩余。

 

多項式的開根

給定一個多項式$A(x)$,其次數為$deg_A$,若存在一個多項式$B(x)$,使其滿足$deg_B≤deg_A$,且$ B^2(x) \equiv A(x) (mod\ x^n)$,則$B(x)$即為$A(x)$在模$x^n$意義下的的開根。

 

求多項式的開根

我們不妨假設,$n=2^k,k∈N$。

若$n=1$,則$b_0^2 \equiv a_0(mod\ x)$。其中$a_0$,$b_0$表示多項式$A$和多項式$B$的常數項。

若需要求出$b_0$,直接用二次剩余求出即可。(不過由於大部分題目公式特別優美,常數項通常為0)

當$n>1$時:

我們假設在模$x^{\frac{n}{2}}$的意義下$A(x)$的開根$B'(x)$我們已經求得。

依據定義,則有

$B^2(x)\equiv A(x) (mod\ x^{n})$          $(1)$

因為多項式$B'(x)$滿足

$B'^2(x)\equiv A(x) (mod\ x^{\frac{n}{2}})$          $(2)$

將$(1)-(2)$,得

$B^2(x)-B'^2(x)\equiv 0(mod\ x^{\frac{n}{2}})$          $(3)$

我們用平方差公式將$(3)$展開

$(B(x)+B'(x))(B(x)-B'(x))\equiv 0(mod\ x^{\frac{n}{2}})$          $(4)$

然后我們會發現多項式$B(x)$有兩個解,下面考慮其中一種情況

$B(x)-B'(x)\equiv 0(mod\ x^{\frac{n}{2}})$          $(5)$

我們將$(5)$式同余符號兩邊平方,得

$B^2(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$          $(6)$

考慮到式$(1)$,我們將式$(1)$代入式$(6)$,得

$A(x)-2B(x)B'(x)+B'^2(x)\equiv 0(mod\ x^n)$          $(7)$

最后對式 $(7)$進行移項,得到

$B(x)\equiv \dfrac{A(x)+B'^2(x)}{2B'(x)} (mod\ x^n)$          $(8)$

 

顯然,我們可以用上述式子,通過倍增,求出n次項的$B(x)$。

這一步的計算我們可以使用多項式求逆元和$NTT$,時間復雜度為$O(n log n)$。

我們可以通過遞歸的方法,求解出最終的$N$次項的$B(x)$

時間復雜度$T(n)=T(\dfrac{n}{2})+O(n log n)=O(n log n)$。

 

模板如下:(暫時還沒有)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM