o r z f j z z q orz~fjzzq orz fjzzq
多项式多点求值
给定一个多项式 F ( x ) F(x) F(x)
求出对于每个点 x i x_i xi 的 F ( x i ) F(x_i) F(xi)
考虑分治
设
L ( x ) = ∏ i = 0 n 2 ( x − x i ) , R ( x ) = ∏ i = n 2 + 1 n ( x − x i ) L(x)=\prod_{i=0}^{\frac{n}{2}}(x-x_i),R(x)=\prod_{i=\frac{n}{2}+1}^n(x-x_i) L(x)=i=0∏2n(x−xi),R(x)=i=2n+1∏n(x−xi)
那么
对于 0 ≤ i ≤ n 2 0 \le i \le \frac{n}{2} 0≤i≤2n
F ( x i ) = ( F m o d L ) ( x i ) F(x_i)=(F~mod~L)(x_i) F(xi)=(F mod L)(xi)
对于 n 2 + 1 ≤ i ≤ n \frac{n}{2}+1 \le i \le n 2n+1≤i≤n
F ( x i ) = ( F m o d R ) ( x i ) F(x_i)=(F~mod~R)(x_i) F(xi)=(F mod R)(xi)
分治下去
可以类似线段树把 L ( x ) / R ( x ) L(x)/R(x) L(x)/R(x) 储存下来
分治就是在 d f s dfs dfs 线段树,每次只要取模就好了
复杂度为大常数 Θ ( n l o g 2 n ) \Theta(nlog^2n) Θ(nlog2n)
多项式插值
给出 n + 1 n+1 n+1 个点 ( x 0 , y 0 ) . . . ( x n , y n ) (x_0,y_0)...(x_n,y_n) (x0,y0)...(xn,yn),求出这个多项式
根据拉格朗日插值
F ( x ) = ∑ i = 0 n y i ∏ j = 0 , j ≠ i n x − x j ∏ j = 0 , j ≠ i n x i − x j F(x)=\sum_{i=0}^{n}y_i\frac{\prod_{j=0,j\ne i}^{n}x-x_j}{\prod_{j=0,j\ne i}^{n}x_i-x_j} F(x)=i=0∑nyi∏j=0,j̸=inxi−xj∏j=0,j̸=in