User:DQ9911

= 多项式全家桶 =

快速傅立叶变换
定义单位根:$w_n^k=e^{\frac {2 k \pi i}{n}}$ &lt;br&gt;DFT: $y_k = \displaystyle \sum_{i=0}^{n-1} a_i (w_n^k)^i$  &lt;br&gt;IDFT: $a_k = \displaystyle \frac1n \sum_{i=0}^{n-1} y_i (w_n^{-k})^i$

一个特殊的技巧：

设$C(x) = A(x) + iB(x), D(x)=A(x)-iB(x)$.

则有$DFT(C)[i] = \overline {DFT(D)[n-i]}$

使用这个技巧可以将3次dft优化到2次dft, 但有精度问题，一定要预处理单位根

任意模数FFT
先拆系数，直接暴力卷积是7次dft

$A(x) = \sum_{i=0}^n (a_i \times 2^{15} + b_i)x^i$

$B(x) = \sum_{i=0}^n (c_i \times 2^{15} + d_i)x^i$

只需要求$a \times c$ 、$a \times d$ 、$b \times c$ 、$b \times d$ 四个卷积

优化方法:

设 $P(x) = \displaystyle \sum_{i=0}^n (a_i + ib_i) x^i$ 、$Q(x) = \displaystyle \sum_{i=0}^n (c_i+id_i) x^i$

使用上面提到共轭复数的技巧，可将dft次数优化到4次

快速数论变换
G为模P意义下的一个原根，此时用$G^{\frac {k(P - 1)}{n}}$ 来代替$w_n^k$ 

常用NTT模数及其原根：$P = r \cdot 2 ^ k + 1$ ,$N$ 不能超过$2^k$ 

NTT的卷积结果为循环卷积, $c[i] = \displaystyle \sum_{(j+k)\equiv (mod \space n)} a[j] \times b[k]$ 

多项式求逆
$A(x)B(x) = 1 (mod \space x^n)$

设$A(x)B_0(x) = 1 (mod \space x^n), A(x)B(x) = 1 (mod \space x^{2n})$

则有$A(x)(B(x) - B_0(x)) = 0 (mod \space x^n)$ ，平方得到$B^2(x) - 2B_0(x)B(x) + B_0^2(x) = 0 (mod \space x^{2n})$

两边同时乘$A(x)$, $B(x) = B_0(x)(2 - A(x)B_0(x)) (mod \space x^{2n})$ , 使用牛顿迭代法复杂度为$O(nlogn)$

多项式取ln
设$B(x) = ln(A(x))$ ,两边求导$B'(x) = \frac {A'(x)}{A(x)}$ ,求$A(x)$ 的逆元即可, 复杂度$O(nlogn)$

多项式exp
cdq分治求法:

设$B(x) = e^{A(x)}$, 则$B'(x) = A'(x)B(x)$

设$B(x) =\displaystyle \sum_{i=0}^n b_i x^i$, $A(x) = \displaystyle \sum_{i=0}^n a_i x^i$.

则有$b_k = \displaystyle \frac 1 k \sum_{i=1}^k a_i b_{k-i}$

下面做法: 设$g(f(x)) = lnB(x) - A(x) = 0$ ,

利用在$f_0(x)$ 出的泰勒展开式得出模$x^n$ 与模$x^{2n}$ 时$B(x)$ 的递推式，再牛顿迭代.

复杂度: $O(nlogn)$ （常数堪比$nlog^2n$ 慎用）

多项式求幂
$f^k(x) = e^{klnf(x)}$

先求$ln f(x)$, 再求$e^{kf(x)}$ 即可. 细节略.

多项式除法
$A(x) = B(x)C(x) + D(x)$ ,设A, B, C, D分别为$n、m, n - m, m - 1$ 阶多项式

$x^nA(\frac 1 x) = x^mB(\frac 1 x)x^{n-m}C(\frac 1 x) + x^{m-1}D(\frac 1 x)x^{n-m+1}$

即$rev(A(x)) = rev(B(x))rev(C(x)) + x^{n-m+1}rev(D(x))$

在模$x^{n-m+1}$ 意义下计算$B(x)$ 逆元即可

= 可持久化字典树 =

用于求解异或最大值问题

通过记录每个节点插入次数实现可持久化

= 拉格朗日插值 =

给一个$n$ 阶多项式的$n + 1$ 个点$(x_0, f(x_0)),(x_1,f(x_1)),(x_2,f(x_2)),...,(x_n,f(x_n))$ ，且$x_i \neq x_j$

现给一个$x$ 的值，要求计算$f(x)$ 的值.

构造多项式如下

$f(x) = \displaystyle \sum_{i=0}^n f(x_i)  \prod_{j \neq i} \frac {x-x_j}{x_i-x_j}$

只需$O(n^2)$ 预处理, $O(n)$ 求值即可.