多项式基础函数
前言
生成函数好,多项式不在大纲,学了才能生。
多项式乘法
\(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)\) 处泰勒展开。
容易发现仅当 \(i \le 1\) 的时候有值。
多项式求逆
给定 \(h(x)\)。
多项式 \(sqrt\)
给定 \(h(x)\)。
多项式 \(exp\)
给定 \(h(x)\)。
多项式带余除法
给定 \(n\) 次多项式 \(f(x)\),\(m\) 次多项式 \(h(x)\)。
\(f=g*h+r\),商 \(g\) 的次数为 \(n-m\)。
另 \(x=\frac{1}{x}\),且等式两边同乘 \(x^n\)。
多项式多点求值
给定 \(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)\),改写成:
分治求 \(G(x)\) 后多点求值即可。
将所求多项式 \(\sum_i \frac{y_i}{G'(x_i)} \prod_{j!=i}(x-x_j)\) 分治出结果即可。
常系数线性递推
\(Cayley-Hamilton\) 定理
在方阵 \(A\) 满秩时恒成立:
线性递推的特征多项式就是特征根方程。
设 \(A\) 为行数为 \(k\) 的方阵,枚举第一行选哪个元素并特殊处理第一个数可得:
\(bostan-mori\) 算法
\(bostan-mori\) 算法可在 \(klogklogn\) 的时间复杂度内算出 \([x^n]\frac{f(x)}{g(x)}\),其中 \(f(x),g(x)\) 均为 \(k\) 次多项式。
考虑分子分母同乘 \(g(-x)\)。
容易发现分母为偶函数,分母与 \(n\) 奇偶性不同的项无贡献。
至此问题规模减半,分治计算即可。
注意边界的清空。
多项式复合逆
记 \(F^{<-1>}(x)\) 为 \(F(x)\) 的复合逆。
复合逆定义:\(F^{<-1>}(F(x))=x\)。
不难得到性质 \(F(F^{<-1>}(x))=x\)。
拉格朗日反演
设 \(G(x)\) 与 \(F(x)\) 互为复合逆。
根据定义:
两边同时 \(k\) 次方得:
两边同时求导得:
两边同乘 \(F^{-N}(x)\) 得:
两边同时取留数得: