多项式求逆——学习笔记

基本概念

  • 多项式的度:对于一个多项式 A(x) A ( x ) ,称其最高项次数为多项式的度,记作 degA d e g A

  • 多项式的逆元:对于 A(x) A ( x ) 若存在 B(x) B ( x ) 满足 degBdegA d e g B ≤ d e g A

    A(x)B(x)1(modxn) A ( x ) B ( x ) ≡ 1 ( mod x n )

    就称 B(x) B ( x ) A(x) A ( x ) 在模 xn x n 意义下的逆元。

    实际上就是多项式乘法的逆元。注意是多项式逆元是在数乘法有逆元的前提下才有的。

算法

大概是个倍增。

n=1 n = 1 时, A(x)a0(modx) A ( x ) ≡ a 0 ( mod x ) ,所以 A1(x)=c1 A − 1 ( x ) = c − 1

n>1 n > 1 时,设 B(x) B ( x ) A(x) A ( x ) xn x n 下的逆元,设 B(x) B ′ ( x ) A(x) A ( x ) xn2 x ⌊ n 2 ⌋ 下的逆元且已求出,则

A(x)B(x)1(modxn2),A(x)B(x)1(modxn2) A ( x ) B ( x ) ≡ 1 ( mod x ⌊ n 2 ⌋ ) , A ( x ) B ′ ( x ) ≡ 1 ( mod x ⌊ n 2 ⌋ )

两式相减,得
B(x)B(x)0(modxn2) B ( x ) − B ′ ( x ) ≡ 0 ( mod x ⌊ n 2 ⌋ )

现在是重要的一步,两边平方,把 xn2 x ⌊ n 2 ⌋ 推到 xn x n :
B2(x)2B(x)B(x)+B2(x)0(modxn) B 2 ( x ) − 2 B ( x ) B ′ ( x ) + B ′ 2 ( x ) ≡ 0 ( mod x n )

然后同乘 A(x) A ( x ) :
B(x)2B(x)B2(x)A(x)(modxn) B ( x ) ≡ 2 B ′ ( x ) − B ′ 2 ( x ) A ( x ) ( mod x n )

就可以倍增啦,用 NTT N T T 做乘法,复杂度:
T(n)=T(n/2)+O(nlogn)=O(nlogn) T ( n ) = T ( n / 2 ) + O ( n log ⁡ n ) = O ( n log ⁡ n )

模板:

#include
int main(){

}

你可能感兴趣的:(多项式)