基本概念
多项式的度:对于一个多项式 A(x) A ( x ) ,称其最高项次数为多项式的度,记作 degA d e g A
多项式的逆元:对于 A(x) A ( x ) 若存在 B(x) B ( x ) 满足 degB≤degA 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 ) ,所以 A−1(x)=c−1 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
)
模
x⌊n2⌋
x
⌊
n
2
⌋
下的逆元且已求出,则
两式相减,得
现在是重要的一步,两边平方,把 x⌊n2⌋ x ⌊ n 2 ⌋ 推到 xn x n :
然后同乘 A(x) A ( x ) :
就可以倍增啦,用 NTT N T T 做乘法,复杂度:
模板:
#include<cstdio>
int main(){
}