前置知识
多项式求逆。
多项式取模
问题描述
求 A(x) mod B(x) ,其中 degA >= degB
Solution
令
A(x)=B(x)C(x)+D(x)
,其中
degD
<
degB
设
degA
=
n
,
有
两边同时乘上 xn ,可得
考虑一下这个式子是什么意思,其实就是将系数全部对称交换一次,
即[
x0
]
A(x)
=[
xn
]
xnA(1x)
,[
x1
]
A(x)
=[
xn−1
]
xnA(1x)
……
接下来考虑每一个新得到的多项式的指数的范围。
xnA(1x)
的每一项指数范围为
[0,n]
xmB(1x)
的每一项指数范围为
[0,m]
xn−mC(1x)
的每一项指数范围为
[0,n−m]
xnD(1x)
的每一项指数范围为
[n−m+1,n]
所以对上述式子对
xn−m+1
取模,可以发现
xnD(1x)
不见了,而
xn−mC(1x)
不会有任何变化。
于是便能得到形如下面的式子
所以
多项式求逆后便可得到
xn−mC(1x)
,将系数翻转回来便可得到
C(x)
,之后便能顺势推出
D(x)
。
时间复杂度
O(n log n)
,常数较大。
多点求值
给出多项式
F(x)
,再给出
a1,a2,a3....,an
,求
F(a1)
,
F(a2)
,……,
F(an)
。
首先由因式定理可得
F(ai)
=
F(x)
mod
(x−ai)
接着我们考虑怎么加速这个过程。
考虑分治。
设多项式
Ql,r(x)=∏ri=l(x−ai)
,
Pl,r(x)=F(x) mod Ql,r(x)
显然有
F(ai)
=
Pi,i(x)
同时显然也有
Pl,mid(x)=Pl,r(x) mod Ql,mid(x)
,
Pmid+1,r(x)=Pl,r(x) mod Qmid+1,r(x)
当我们分治到区间(
i
,
Ql,r(x)
可以用分治
FFT
先求出来。
一次多项式取模的时间复杂度为 O(n log n) ,分治 FFT 的时间复杂度为 O(n log2 n) ,所以总的时间复杂度为 O(n log2 n) ,常数巨大。
插值
已知
F(a1)
=
b1
,
F(a2)
=
b2
……
F(an)
=
bn
,求
F(x)
。
考虑用拉格朗日插值法。
直接暴力算要
O(n2)
,但我们可以通过某些玄学方法优化时间复杂度。
将式子分成两部分。
设
设
则有 Gi=Mi(ai) ,同时也有 M(ai)=0 。
当
x
=
用分治 FFT 求出 M(x) ,在求出其导函数 M′(x) ,然后再做一次多点求值求出 Gi 。
接下来只剩下了 bi[∏i≠j(x−aj)] ,这部分可以用分治 FFT 求解。
多点求值和分治 FFT 的时间复杂度都是 O(n log2 n) 的,所以总的时间复杂度是 O(n log2 n) ,常数……