Loading

多项式全家桶

多项式求逆

假设我们要求 \(G(x) = \frac{1}{F(x)}\)

考虑倍增,设求出 \(H(x) \equiv \frac{1}{F(x)} \pmod {x^{\frac{n}{2}}}\)

\[G(x) \equiv \frac{1}{F(x)} \pmod {x^{\frac{n}{2}}} \]

\[G(x) \equiv H(x) \pmod {x^{\frac{n}{2}}} \]

\[G(x)- H(x) \equiv 0 \pmod {x^{\frac{n}{2}}} \]

\[(G(x)- H(x))^2 \equiv 0 \pmod {x^n} \]

\[G(x)^2 + H(x)^2 - 2 G(x) H(x) \equiv 0 \pmod {x^n} \]

\[G(x)^2 F(x) + H(x)^2 F(x) - 2 G(x) H(x) F(x) \equiv 0 \pmod {x^n} \]

\[G(x) + H(x)^2 F(x) - 2H(x) \equiv 0 \pmod {x^n} \]

\[G(x) \equiv 2H(x) - H(x)^2 F(x) \pmod {x^n} \]

多项式开根

假设我们要求 \(G(x) = \sqrt{F(x)}\)

考虑倍增,设求出 \(H(x) \equiv \sqrt{F(x)} \pmod {x^{\frac{n}{2}}}\)

\[H^2(x) \equiv F(x) \pmod {x^{\frac{n}{2}}} \]

\[G^2(x) \equiv F(x) \pmod {x^n} \]

\[G^2(x) - H^2(x) \equiv 0 \pmod {x^{\frac{n}{2}}} \]

\[(G(x) - H(x))(G(x) + H(x)) \equiv 0 \pmod {x^{\frac{n}{2}}} \]

\[G(x) - H(x) \equiv 0 \pmod {x^{\frac{n}{2}}} \]

\[G^2(x) + H^2(x) - 2H(x)G(x) \equiv 0 \pmod {x^n} \]

\[F(x) + H^2(x) - 2H(x)G(x) \equiv 0 \pmod {x^n} \]

\[G(x) \equiv \frac{H^2(x) + F(x)}{2H(x)} \pmod {x^n} \]

MTT

拆系数,让 \(G\) 为我们拆系数所用的阈值, \(F_{0_i} = F(x) \bmod G\)\(F_{1_i} = \lfloor\frac{F(x)}{G}\rfloor\)

那么我们求 \(F(x) \times H(x)\),那么就是求 \((F_0(x) + G \times F_1(x)) (H_0(x) + G \times H_1(x)) = F_0(x) H_0(x) + G (F_0(x) H_1(x) + F_1(x) H_0(x)) + G^2 F_1(x) H_1(x)\)

那么我们就是要算 \(A(x) = F_0(x) H_0(x)\)\(B(x) = F_0(x) H_1(x) + F_1(x) H_0(x)\)\(C(x) = F_1(x) H_1(x)\),这个 \(FFT\) 算就好了。

多项式对数函数

\[\ln' (F(x)) = \frac{F'(x)}{F(x)} \]

答案是 \(\int ( \frac{F'(x)}{F(x)} )\)

泰勒展开

\(f(x)\)\(x_0\) 处泰勒展开:\(\sum\limits_{i = 0} \frac{F^i (x_0)}{i!} (x - x_0) ^ i\)

可以理解为无限逼近。让 \(k\) 阶导数都相同,那么多项式相同。

多项式牛顿迭代

给定一个函数 \(g\)

已知\(g(f(x)) \equiv 0 \pmod {x^{n}}\), 求 \(f\)

倍增。设已经得到了 \(x ^ {\frac{n}{2}}\) 的解 \(f_0(x)\)

\(g(f(x))\)\(f_0(x)\) 处泰勒展开。

\[\sum\limits_{i = 0}^{+ \infty} \frac{g^i( f_0(x) )}{i!} (f(x) - f_0(x))^i \equiv 0 \pmod {x^n} \]

由于 \(f(x) - f_0(x) \equiv 0 \pmod x^{\frac{n}{2}}\)

那么 \(\sum\limits_{i = 0}^{+ \infty} \frac{g^i ( f_0(x) )}{i!} (f(x) - f_0(x))^i \equiv g(f_0(x)) + g'(f_0(x)) (f(x) - f_0(x)) \pmod {x^n}\)

\[f(x) = f_0(x) - \frac{g(f_0(x))}{g'(f_0(x))} \pmod {x^n} \]

多项式exp

要对 \(h(x)\)\(\exp\)

\(g(f(x)) = \ln(f(x)) - h(x)\)

如果我们已经求得了 \(f_0(x) = \exp(h(x)) \pmod {x^{\frac{n}{2}}}\)

\[f(x) \equiv f_0(x) - \frac{\ln f_0(x) - h(x)}{\frac{1}{f_0(x)}} \pmod {x^n} \]

\[f(x) \equiv f_0(x) (1 - \ln f_0(x) + h(x)) \pmod {x^n} \]

多项式除法

题解 link

定义 \(F_R(x)\) 为把 \(F(x)\) 系数翻转后的函数

\(F_R(x)\) 系数为 \(k\) ,那么 \(F_R(x)=F(\frac{1}{x})*x^k\)

\(f(x)=g(x)*q(x)+r(x)\)\(f\) 次数为 \(n\)\(g\) 次数为 \(m\)\(q\) 次数为 \(n-m\)\(r\) 次数 \(\le m-1\)

我们可以把 \(\frac{1}{x}\) 带入函数

\[f(\frac{1}{x})=g(\frac{1}{x})*q(\frac{1}{x})+r(\frac{1}{x}) \]

\[f(\frac{1}{x})*x^n=g(\frac{1}{x})*x^mq(\frac{1}{x})*x^{n-m}+r(\frac{1}{x})*x^{m-1}*x^{n-m+1} \]

\[f_R(x)=g_R(x)*q_R(x)+r_R(x)*x^{n-m+1} \]

\[f_R(x) \equiv g_R(x)*q_R(x) \pmod {x^{n-m+1}} \]

\[q_R(x)\equiv \frac{f_R(x)}{g_R(x)} \pmod {x^{n-m+1}} \]

从而我们可以知道 \(q(n) \bmod x^{n-m+1}\)

我们知道 \(q\) 次数为 \(n-m\) ,而模数次数为 \(n-m+1\),因此我们就算出了 \(q\)

\(r\) 可以用

\[r(x)=f(x)-g(x)*q(x) \]

多项式多点求值

假设我们要对 \(x_1, x_2 ... x_n\) 进行多点求值,给定的多项式是 \(F(x)\) (\(n-1\) 次多项式)。

\(mid = \frac{n}{2}\)

考虑分治,如何算 \(x_1, x_2 ... x_{mid}\) 的多项式?

\(G(x) = (x - x_1) (x - x_2) ... (x - x_{mid})\)

那么我们可以让 \(F(x) = G(x) Q(x) + R(x)\)。发现 \(x_1, x_2 ... x_{mid}\)\(F(x)\) 多点求值,而在 \(G(x) Q(x)\) 处对这些点没有贡献。

(因为有 \((x - x_i)\) 的因式)

因此问题就相当于对 \(R(x)\) 多点求值,而 \(R(x)\) 的次数是原来的一半。对 \(x_{mid + 1}, x_{mid + 2} ... x_{n}\) 做是同理。

时间复杂度是 \(T(n) = 2T(\frac{n}{2}) + n \log n\),即 \(\Theta(n \log ^2 n)\)

多项式快速插值

考虑拉格朗日插值:\(\sum\limits_{i = 1}^{n} \frac{\prod_{j \neq i} (x - x_j)}{\prod_{j \neq i} (x_i - x_j)} y_i\)

\(d_i = y_i \prod\limits_{j \neq i} (x_i - x_j)\)

如果我们算出了 \(d_i\),那么答案就是 \(\sum\limits_{i = 1}^{n} \prod_{j \neq i} (x - x_j) d_i\) ,很容易分治 + \(NTT\) 算。

这个 \(\prod\limits_{j \neq i} (x_i - x_j)\) 很恶心,主要原因是这个 \(j \neq i\)

考虑我们计算 \(\lim\limits_{x \to x_i}\frac{\prod\limits_{j \neq i} (x - x_j)}{x - x_i}\)

\(f(x) = \prod\limits_{j \neq i} (x - x_j)\)。而且我们知道 \(f(x_i) = 0\),于是要求的变成:

\[\lim\limits_{x \to x_i}\frac{f(x) - f(x_i)}{x - x_i} \]

这显然是 \(f(x_i)\) 的导数。求处 \(f(x)'\) 然后快速插值即可。

时间复杂度也是 \(\Theta(n \log^2 n)\)

posted @ 2020-12-01 16:35  zhoukangyang  阅读(27)  评论(0编辑  收藏  举报