多项式全家桶

参考 https://www.luogu.com.cn/blog/command-block/ntt-yu-duo-xiang-shi-quan-jia-tong

\(\text{FFT 和 NTT}\)

多项式乘法逆

\(\texttt{link}\)

求满足 \(f(x)f_{*}(x)\equiv 1 \pmod{x^n}\)

倍增,若有 \(g(x)f(x)\equiv 1\pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

\(f_{*}(x) \equiv g(x) \pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

移项,\(f_{*}(x) - g(x)\equiv 0 \pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

平方,\(f_{*}(x)^2 - 2f_{*}(x)g(x)+g(x)^2\equiv 0 \pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

乘上 \(f(x)\)\(f_{*}(x) - 2g(x)+f(x)g(x)^2\equiv 0 \pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

移项得到 \(f_{*}(x) \equiv 2g(x) - f(x)g(x)^2 \pmod{x^{\left\lceil{\frac{n}{2}}\right\rceil}}\)

时间复杂度 \(T(n) = T(n/2) + \mathrm{O(n\log n)} = \mathrm{O(n\log n)}\)

多项式牛顿迭代

已知函数 \(G\)\(G(F(x)) = 0\),求 \(F(x)\)

柿子:\(F(x) \equiv F_{*}(x) - \dfrac{G(F_{*}(x))}{G'(F_{*}(x))} \pmod{x^n}\)

多项式 ln

\(\texttt{link}\)

\(f(x) = \ln x\),则 \(B(x) = f(A(x))\)

两边求导,\(B'(x) = f'(A(x))A'(x) = \dfrac{A'(x)}{A(x)}\)

最后积分回去即可得到 \(B(x)\)

多项式 exp

\(\texttt{link}\)

牛顿迭代,记 \(G(B(x)) = \ln B(x) - A(x)\)

\(G'(B(x)) = B(x)^{-1}\)

\(B(x) = B_{*}(x) - \dfrac{G(B_{*}(x))}{G'(B_{*}(x))}\)

\(B(x) = B_{*}(x) - (\ln B_{*}(x) - A(x))B_{*}(x)\)

\(B(x) = (1 - \ln B_{*}(x) + A(x))B_{*}(x)\)

多项式快速幂

\(\texttt{link}\)

\(B(x) = A^k(x) = (e^{\ln A(x)})^k = e^{k\ln A(x)}\)

直接 \(\ln \exp\) 就可以做到 \(\mathrm{O(n\log n)}\),当然也可以暴力 \(\mathrm{O(n\log n\log{k})}\)

一些经典套路:

\(T\) 的长度为 \(m\),设 \(h_i = \sum\limits_{j=0}^{m}(S_{i+j} - T_j)^2\),若 \(i\) 为起始点的子串可以匹配 \(T\),那么满足 \(h_i = 0\)

由于 \(T\) 有万能符 \(?\),可以将 \(T_j\) 赋值为 \(0\),并将 \(h\) 改为 \(h_i = \sum\limits_{j=0}^{m}(S_{i+j} - T_j)^2S_{i+j}T_j\)

但是这并不满足卷积形式,套路地翻转字符串 \(T\),将 \(h\) 改为:

\[h_i = \sum\limits_{j=0}^{m}(S_{i-j}-T_j)^2S_{i-j}T_j \]

拆开:

\[\begin{aligned}h_i = \sum\limits_{j=0}^mS_{i-j}^3T_j -2S_{i-j}^2T_j^2 + S_{i-j}T_j^3\end{aligned} \]

分成三部分卷起来即可得到 \(h\)

\(h_i = 0\),则 \(i - m\) 为一个可行的起始点。

\(\texttt{Code}\)

posted @ 2021-12-16 19:29  klii  阅读(88)  评论(0)    收藏  举报