暂时只更了 多项式求逆 ,多项式 Ln ,多项式 exp。。
多项式求逆
众所周知,一个多项式求逆后是一个无穷次项的玩意。但是我们一般只需要它的前 n 项。
我们需要算出:
这东西怎么做?背板 我们可以考虑倍增来求解。
首先如果 A 仅有一项,那么 B[0] 就是 A[0] 的逆元。
否则,假设我们已经有了
同时我们必然有真正的 B 在模 x^{\lfloor\frac n 2 \rfloor } 的时候也是 1 ,也就是说有
那么考虑两个式子相减
由于 A 显然不同余于 0 ,所以有
所以我们可以平方一下,把模的位置翻倍,并且由于是向上取整,我们知道前 n 项都会是 0。
然后我们可以给式子的一遍乘上一个 A ,仍然前 n 项是 0 :
由于 AB 显然是 1 ,所以我们拆开有
所以移项后有
这个东西复杂度用主定理分析出来是 O(n\log n) 而不是 O(n\log ^2n) 哦。
同时也正好复习一下 NTT 的板子。等会顺便也复习下 分治 NTT 吧 QwQ
求逆跑得好快啊
cpp
1 |
|
多项式 Ln
我们考虑
两边导一下:
所以我们可以对 A 求逆乘上 A’ 然后再做个积分就完事了。
cpp
1 |
|
多项式 exp
已知 B(x) \equiv \exp A(x) \pmod{x^n} ,给定 A(x) 求出 B(x)。
首先考虑构造 G(x) ,满足 G(B(x)) = 0 ,那么
我们知道
那么带入泰勒展开那里的公式
实现上,我们可以先递归下去算出 B’(x) \equiv A(x) \pmod {\lceil\frac{n}{2}\rceil} ,然后通过上面那个式子把它变成 B(x) \pmod {x^n} 。
复杂度也可以分析得 O(n\log n) 但是常数很大。(虽然据说论文哥可以让它跑得比我写的 NTT 还快)
cpp
1 |
|