牛顿迭代
问题描述
已知函数 (G(x)) ,求一个多项式 (F(x) mod x^n) 满足 (G(F(x))equiv 0 (mod x^n)) 。
Solution
我们假设已经求出 (G(F_0(x))equiv 0 (mod x^{lceilfrac{n}{2} ceil})) ,考虑如何拓展到 (mod x^n) 下。
我们把 (G(F(x))) 在 (F_0(x)) 处进行泰勒展开:
因为 (F(x)) 和 (F_0(x)) 的最后 (lceilfrac{n}{2} ceil) 项相同,所以 ((F(x)-F_0(x))^2) 最低非 (0) 项系数大于 (2cdotlceilfrac{n}{2} ceil) ,所以可以得到:
然后对 (n=1) 的时候,我们单独求出满足条件的 (F(x)) 即可递推出答案。
多项式求逆
问题描述
给出 (F(x)) ,求出 (G(x)) ,使得 (F(x)cdot G(x)equiv 1 (mod x^n)) ,系数对 (998244353) 取模。
Solution
我们设 (H(x)) 满足 (F(x)cdot H(x)equiv 1 (mod x^{lceilfrac{n}{2} ceil})) 。
而显然 (F(x)cdot G(x)equiv 1 (mod x^{lceilfrac{n}{2} ceil})) 。
两者相减,我们可以得到 (F(x)cdot(G(x)-H(x))equiv 0 (mod x^{lceilfrac{n}{2} ceil})) 。
所以 (G(x)-H(x)equiv 0 (mod x^{lceilfrac{n}{2} ceil})) 。
我们将等式平方,可以得到:
同时乘上 (F(x)) ,则:
因为 (F(x)cdot G(x)=1) ,所以我们有:
然后我们就可以根据这个等式倍增求解了,每次算出上一层的 (H(x)) ,然后推出 (G(x)) ,时间复杂度为 (O(nlog n)) 。
分治 (FFT)
问题描述
已知一个长度为 (n) 的数组 (g[0],g[1],cdots,g[n-1]) ,求 (f[0],f[1],cdots,f[n-1]) ,其中:
边界为 (f[0]=1,g[0]=0) ,答案对 (998244353) 取模。
Solution
我们先对 (f[i]) 的递推式变一下形。
因为 (g[0]=0) ,所以上下是完全等价的。
我们设 (F(x),G(x)) 分别为数组 (f,g) 的生成函数。
我们可以得到:
可以发现和 (F(x)) 相比,我们有:
然后就可以直接上多项式求逆的模板了。
多项式对数函数(多项式 (ln) )
问题描述
给出一个 (n-1) 次多项式 (A(x)) , 求一个 (mod x^n) 下的多项式 (B(x)) ,满足 (B(x)=ln A(x)) 。
Solution
我们定义 (G(x)=F(A(x)),F(x)=ln x) 。
根据链式法则,我们有:
所以我们只需要对 (A(x)) 求逆,即可算出 (G'(x)) 。
由于求导和不定积分是互逆的,所以我们再对 (G’(x)) 求一个积分即可得到 (G(x)) 。
- 求导公式: (F(x)=x^n,F'(x)=ncdot x^{n-1}) 。
- 积分公式: (int x^ndx=frac{1}{n+1}x^{n+1}) 。
多项式指数函数(多项式 (exp) )
问题描述
给出一个 (n-1) 次多项式,求一个 (mod x^n) 下的多项式 (B(x)) ,满足 (B(x)equiv e^{A(x)}) 。
Solution
我们先对原式取一个 (ln) ,可以得到:
我们设 (G(B(x))=ln B(x)-A(x)) ,那么就要求这一个函数的零点。我们将 (B(x)) 看做变量, (A(x)) 看做常量,对 (G(B(x))) 求导,可以得到 (G'(B(x))=frac{1}{B(x)}) 。
代入牛顿迭代的公式得:
因为 (A(0)=0) ,所以 (B(x)) 的常数项为 (1) ,剩下的就是各种板子了。
多项式除法
问题描述
给定一个 (n) 次多项式 (F(x)) 和一个 (m) 次多项式 (G(x)) ,请求出多项式 (Q(x),R(x)) ,满足一下条件:
- (Q(x)) 的次数为 (n-m) , (R(x)) 的次数小于 (m)
- (F(x)=Q(x)cdot G(x)+R(x)) 。
Solution
假设 (A(x)) 为一个 (n) 次多项式,我们这样定义 (A_r(x)) :
- (A_r(x)=x^ncdot A(frac{1}{x})) 。
显然,我们可以得到 (A_r(x),A(x)) 的区别是系数翻转了。
开始推式子:
在模 (x^{n-m+1}) 的意义下,我们可以得到:
然后 (R(x)=F(x)-G(x)cdot Q(x)) 。
多项式开根
问题描述
给定一个 (n-1) 次多项式 (A(x)) ,求一个在 (mod x^n) 意义下的多项式 (B(x)) ,使得 (B^2(x)equiv A(x) (mod x^n)) 。若有多解,请取零次项系数较小的作为答案。
Solution
我们假设已经求出一个 (H(x)) ,满足:
显然,我们有:
多项式快速幂
问题描述
给定一个 (n-1) 次多项式,求一个在 (mod x^n) 意义下的多项式 (B(x)) ,使得 (B(x)equiv A^k(x) (mod x^n)) 。
Solution
两边取 (ln) ,可以得到: