关于多项式的做题记录及整理
最近被多项式制裁了,故开此贴记录一些做过的多项式题及多项式trick。
FFT、NTT、基本求导技巧
HDU 多校 Day3 1004
Problem
求 \((a_{2}x^{2}+a_{1}x+a_{0})^t\),\(t\le 10^7\)。系数对 \(998244353\) 取模。
Solution
设 \(F(x)=a_{2}x^{2}+a_{1}x+a_{0}\),\(G(x)=F^t(x)\),那么对 \(G(x)\) 求导得
利用 \([x^i]F'(x)=(i+1)[x^{i+1}]F(x)\),可以得到 \([x^i]G(x)\) 与 \([x^{i-1}]G(x),[x^{i-2}]G(x)\) 的关系式。
故可 \(O(t)\) 求解。
付公主的背包
Problem
求 \(\prod\limits_{i=1}^{n}(x^{a_i}+1) \bmod x^{m+1}\),其中 \(n,m,a_i\le 10^5\)。答案对 \(998244353\) 取模。
Solution
该多项式次数为 \(\sum a_i\),过大,故无法直接 NTT。
考虑将上式取对,得:
由 \(\ln{(1+x)}\) 的麦克劳林展开 \(\ln{(1+x)}=\sum\limits_{n=1}^{\infty}{(-1)^{n-1}\frac{x^n}{n}}\) 可得:
再考虑对上式 \(\exp\)。记 \(g(x)=\exp{f(x)}\),求导可得:
上述式子使用 CDQ 分治处理即可,时间复杂度 \(O(n\log^2{n})\)。
多项式牛顿迭代、多项式初等函数
多项式牛顿迭代用于求解自变量为多项式的函数的零点。
所谓自变量为多项式的函数,即将多项式看作函数自变量,例如 \(g(f(x))\),即为将 \(f(x)\) 看作函数 \(g\) 的自变量。
考虑求解自变量为多项式的函数 \(g(f(x))\) 在模 \(x^n\) 意义下的零点,即求解方程 \(g(f(x))\equiv 0\pmod{x^n}\)。
不妨假设我们已经求出该函数在模 \(x^{\lceil \frac{n}{2}\rceil}\) 意义下的零点 \(f_0(x)\),显然 \(f_0(x)\equiv f(x)\pmod{x^{\lceil \frac{n}{2}\rceil}}\)。
考虑对函数 \(g(f(x))\) 在 \(f(x)=f_0(x)\) 处泰勒展开,得到:
由于 \(f(x)-f_0(x)\) 的最低次数大于 \(\lceil \frac{n}{2}\rceil\),故当 \(i\le 2\) 时,有 \((f(x)-f_0(x))^i\equiv 0\pmod{x^n}\)。
我们将 \(g(f(x))\) 的泰勒展开带回原方程并化简得到:
移项可得:
\(\frac{g(f_0(x))}{g'(f_0(x))}\) 的求解根据具体函数选择方法。
\([x^0]f(x)\) 需根据 \(g(f(x))\equiv 0\pmod{x}\) 另行求解。
多项式牛顿迭代的使用可以类比高中数学的构造函数求零点,我们不妨设 \(h(x)\) 为给定多项式,\(f(x)\) 为目标多项式,他们之间的关系为 \(h(x)=p(f(x))\),其中 \(p(f(x))\) 为自变量为 \(f(x)\) 的函数。
用高中数学的套路进行类比,我们可以将 \(f(x)\) 看作自变量,\(h(x)\) 看作常数,我们要解这样子的一个方程 \(p(f(x))=h(x)\),那么我们可以设函数 \(g(f(x))=p(f(x))-h(x)\),我们要做的就是求解函数 \(g(f(x))\) 在 \(\bmod{x^n}\) 意义下的零点。
接下来的事情就是使用多项式牛顿迭代了。
多项式乘法逆
Problem
已知 \(A(x) * B(x)\equiv 1\pmod{x^n}\),求 \(B(x)\),其中 \(A(x)=\sum_{i=0}^{n-1}a_ix^i\) ,保证有解。系数对 \(998244353\) 取模,\(n\le 10^5\)。
Solution
考虑构造函数 \(g(f(x))=\frac{1}{f(x)}-h(x)\),代入多项式牛顿迭代得:
直接递归使用 NTT 计算即可,时间复杂度 \(T(n)=T(\frac{n}{2})+O(n\log{n})=O(n\log{n})\)。
多项式开根
Problem
求 \(B^2(x)\equiv A(x)\pmod{x^n}\),其中 \(A(x)=\sum_{i=0}^{n-1}a_ix^i\) ,若有多解,选择零系数最小的解。系数对 \(998244353\) 取模,\(n\le 10^5\)。
Solution
待续。
多项式 ln
Problem
求 \(\exp{B(x)}\equiv A(x)\pmod{x^n}\),其中 \(A(x)=\sum_{i=0}^{n-1}a_ix^i\) ,保证 \(a_0=1\)。系数对 \(998244353\) 取模,\(n\le 10^5\)。
Solution
\(\ln{f(x)}\) 存在,必须满足 \([x^0]f(x)=0\)。
设 \(g(x)=\ln{f(x)}\),其中 \(f(x)\) 为给定多项式,\(g(x)\) 为目标多项式。
对 \(x\) 求导,得:
根据 \([x^{i}]g'(x)=(i+1)[x^{i+1}]g(x)\),我们可利用 \(g'(x)\) 得到 \(g(x)\)。
带入 \(x=0\) 可知,\(\exp{g(x)}\) 存在的前提是 \([x^0]g(x)=0\)。
计算 \(g'(x)\) 使用多项式求逆即可。
时间复杂度 \(O(n\log{n})\)。
多项式 EXP
Problem
求 \(B(x)\equiv \exp{A(x)}\pmod{x^n}\),其中 \(A(x)=\sum_{i=0}^{n-1}a_ix^i\) ,保证 \(a_0=1\)。系数对 \(998244353\) 取模,\(n\le 10^5\)。
Solution
显然 \(h(x)=\ln{f(x)}\),我们直接构造函数 \(g(f(x))=\ln{f(x)}-h(x)\),并求解其零点。
求解函数 \(g(f(x))\) 直接带入牛顿迭代公式即可,我们可以得到 \(g(f(x))\equiv f_0(x)-\frac{\ln{f(x)}-h(x)}{\frac{1}{f_0(x)}}\pmod{x^n}\),化简可得:
计算 \(\ln{f_0(x)}\) 直接利用多项式 ln 算法即可,该部分时间复杂度 \(O(n\log{n})\)。
时间复杂度 \(T(n)=T(\frac{n}{2})+O(n\log{n})=O(n\log{n})\)。
多项式多点求值
多项式多点求值
待更新。
2024 北京市赛 E
待更新。
2024 ICPC 昆明邀请赛 H
待更新。

浙公网安备 33010602011771号