多项式基础函数

前言

生成函数好,多项式不在大纲,学了才能生。

多项式乘法

\(FFT(NTT)\)

将多项式 \(f(x)\) 通过变换为 \(f'(x)\) 满足 \((f*g)'(x)=f'(x)*g'(x)\)
容易发现变换为点权表达式。

求点权表达式

考虑分治,如何将问题减半。
设求 \(f(x)=\sum_i a_i x^i\)
将问题分为 \(g(x)=\sum_i a_{2i} x^i\)\(h(x)=\sum_i a_{2i+1} x^i\)
就有 \(f(x)=g(x^2)+xh(x^2)\)
如何将问题减半,可以发现单位根有性质 \(w_{2n}^n = -1\)
\(w_n^i\) 带入 \(f(x)\)
\(f(w_{2n}^i)=g(w_n^i) + w_{2n}^i h(w_n^i)\)
\(f(w_{2n}^{i+n})=g(w_n^i) - w_{2n}^i h(w_n^i)\)
带入一半的点即可。

转系数表达式

前面单位根反演。
中间证明忘了。
后面单位根取逆就行了。

多项式 \(ln\)

考虑到 \(ln(f(x))\) 的对 \(x\) 求导为 \(\frac{f'(x)}{f(x)}\)
\(ln(f(x))\) 先对 \(x\) 求导,算出多项式后。再对 \(x\) 积分即可。

多项式牛顿迭代

求模 \(n\) 意义下的 \(G(x,f(x)) \equiv 0\) 的解。
考虑倍增。
\(f_n(x)\) 为模 \(n\) 意义下的解。
\(G(x,f(x))\)\(f_n(x)\) 处泰勒展开。

\[\sum_i \frac{\frac{\delta^i G}{\delta y^i}(x,f_n(x))}{i!} (f(x)-f_n(x))^i=0 \pmod{x^{2n}} \]

容易发现仅当 \(i \le 1\) 的时候有值。

\[G(x,f_n(x))+\frac{\delta G}{\delta y}(x,f_n(x))(f(x)-f_n(x))=0 \pmod{x^{2n}} \]

\[f_{2n}(x)=f_n(x)-\frac{G(x,f_n(x))}{\frac{\delta G}{\delta y}(x,f_n(x))} \]

多项式求逆

给定 \(h(x)\)

\[G(x,f(x))=\frac{1}{f(x)}-h(x) \]

\[f_{2n}(x)=f_n(x)-\frac{\frac{1}{f_n(x)}-h(x)}{-\frac{1}{f_n^2(x)}} \]

\[f_{2n}(x)=f_n(x)(2-f_n(x)h(x)) \]

多项式 \(sqrt\)

给定 \(h(x)\)

\[G(x,f(x))=f^2(x)-h(x) \]

\[f_{2n}(x)=f_n(x)-\frac{f_n^2(x)-h(x)}{2f_n(x)} \]

\[f_{2n}(x)=\frac{f_n^2(x)+h(x)}{2f_n(x)} \]

多项式 \(exp\)

给定 \(h(x)\)

\[G(x,f(x))=ln(f(x))-h(x) \]

\[f_{2n}(x)=f_n(x)-\frac{ln(f_n(x))-h(x)}{\frac{1}{f_n(x)}} \]

\[f_{2n}(x)=f_n(x)(1-ln(f_n(x))+h(x)) \]

多项式带余除法

给定 \(n\) 次多项式 \(f(x)\)\(m\) 次多项式 \(h(x)\)
\(f=g*h+r\),商 \(g\) 的次数为 \(n-m\)
\(x=\frac{1}{x}\),且等式两边同乘 \(x^n\)

\[f^R=g^R*h^R+r^R*x^{n-m+1} \]

\[g^R=f^R*(h^R)^{-1} \pmod{x^{n-m+1}} \]

多项式多点求值

给定 \(f(x)\)
注意到求 \(f(a_i)\) 值过程为将多项式模 \(x-a_i\) 的值为多少。
考虑分治。
将区间 \([l,r]\)\(\prod_{i=l}^{r}(x-a_i)\) 取模不影响结果且多项式长度能减少一半。
分治到单点返回结果即可。

多项式快速插值

拉格朗日插值

将每个点贡献计算 \(\sum_i y_i\)
考虑乘一个系数,使得每个 \(y_i\) 都只能贡献到自己对应的 \(x_i\) 上,所以乘上 \(\prod_{j!=i}(x-x_j)\)
将上面的系数在 \(x_i\) 处化为 \(1\),所以乘上 \(\prod_{j!=i}(x_i-x_j)^{-1}\)
多项式 \(\sum_i y_i \prod_{j!=i}\frac{x-x_j}{x_i-x_j}\) 即为所求。

快速插值

考虑优化拉格朗日插值。
考虑求常数 \(\prod_{j!=i}(x_i-x_j)^{-1}\)
\(G(x)=\prod_j (x-x_j)\),改写成:

\[\lim_{x\to x_i} \frac{G(x)}{(x-x_i)} = \lim_{x\to x_i} G'(x) \]

分治求 \(G(x)\) 后多点求值即可。
将所求多项式 \(\sum_i \frac{y_i}{G'(x_i)} \prod_{j!=i}(x-x_j)\) 分治出结果即可。

常系数线性递推

\(Cayley-Hamilton\) 定理

在方阵 \(A\) 满秩时恒成立:

\[\prod_k(\lambda_k E-A) = 0 \]

线性递推的特征多项式就是特征根方程。

\[A-\lambda E = \begin{bmatrix} a_1-\lambda & a_2 & \cdots & a_{k-1} & a_k \\ 1 & -\lambda & \cdots & 0 & 0\\ 0 & 1 & \cdots & 0 & 0\\ \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & \cdots & 1 & -\lambda \end{bmatrix} \]

\(A\) 为行数为 \(k\) 的方阵,枚举第一行选哪个元素并特殊处理第一个数可得:

\[\begin{aligned} |A-\lambda E| = 0 \\ \Leftrightarrow -\lambda^k + \sum_i (-1)^(i-1) a_i (-\lambda)^{k-i} = 0 \\ \Leftrightarrow \lambda = 0 \end{aligned} \]

\(bostan-mori\) 算法

\(bostan-mori\) 算法可在 \(klogklogn\) 的时间复杂度内算出 \([x^n]\frac{f(x)}{g(x)}\),其中 \(f(x),g(x)\) 均为 \(k\) 次多项式。
考虑分子分母同乘 \(g(-x)\)

\[[x^n]\frac{f(x)g(-x)}{g(x)g(-x)} \]

容易发现分母为偶函数,分母与 \(n\) 奇偶性不同的项无贡献。

\[[x^n]\frac{f_0(x^2)+xf_1(x^2)}{g_0(x^2)} \Leftrightarrow [x^{n/2}]\frac{f'(x)}{g'(x)} \]

至此问题规模减半,分治计算即可。

注意边界的清空。

多项式复合逆

\(F^{<-1>}(x)\)\(F(x)\) 的复合逆。
复合逆定义:\(F^{<-1>}(F(x))=x\)
不难得到性质 \(F(F^{<-1>}(x))=x\)

拉格朗日反演

\(G(x)\)\(F(x)\) 互为复合逆。
根据定义:

\[G(F(x))=x \]

两边同时 \(k\) 次方得:

\[G^k(F(x))=x^k \]

两边同时求导得:

\[\begin{aligned} F'(x)(G^k)'(F(x))=k x^{k-1} \\ F'(x)\sum_i i([w^i]Q^k(w))(F^{i-1}(x))=kx^{k-1} \end{aligned} \]

两边同乘 \(F^{-N}(x)\) 得:

\[\begin{aligned} F'(x)\sum_i i([w^i]Q^k(w)) (F^{i-1-N}(x))=kx^{k-1}F^{-N}(x) \\ \sum_i i([w^i]Q^k(w)) F'(x)(F^{i-1-N}(x))=kx^{k-1}F^{-N}(x) \end{aligned} \]

两边同时取留数得:

\[\begin{aligned} \sum_i i([w^i]Q^k(w)) [i-1-N=-1] = [x^{-1}]kx^{k-1}F^{-N}(x) \\ N[w^N]Q^k(w) = k[x^{-k}]F^{-N}(x) \end{aligned} \]

posted @ 2025-08-08 22:29  C_Wish  阅读(15)  评论(0)    收藏  举报