小摸一会儿鱼

多项式复合逆

对于形式幂级数 \(f\),若存在形式幂级数 \(g\) 使得 \(g(f(x)) = x\),则称 \(g\)\(f\) 的复合逆. 容易发现此时一定有 \(f(g(x)) = x\),因此也称 \(f\)\(g\) 互为复合逆.

容易发现,复合逆存在的充要条件是没有常数项且有一次项.

拉格朗日反演

从 oi-wiki 上学习形式 Laurent 级数相关知识,Lagrange 反演所需要的核心结论为

对于形式 Laurent 级数 \(f\)\(g\),其中 \(g\) 的最低次项为一次项,有

\[\def\res{\operatorname{res}} \def\ord{\operatorname{ord}} \res(f) = \res(f(g)g') \]

这个性质的证明比较简单,考虑线性性,只需证明 \(f\) 只有一项的情况,即

\[\def\res{\operatorname{res}} \def\ord{\operatorname{ord}} \res(g^kg') = [k=-1] \]

\(k\not =-1\) 时,\(g^kg' = \left(\frac1{k + 1}g^{k + 1}\right)'\),形式留数显然为 \(0\).

\(k=-1\) 时,相当于求 \([x^{-1}]\frac{g'}{g}\),分别将分母分子展开,容易发现值为 \(1\).


下面是 Lagrange 反演的结论

对于互为复合逆的形式幂级数 \(f, g\),取任意形式 Laurent 级数 \(\Phi\),有

\[[x^n] \Phi(f(x)) = [x^{-1}]\frac{\Phi(x)g'(x)}{g^{n + 1}(x)} = [x^{n}]\Phi(x)\left(\frac{g(x)}{x}\right)^{-n - 1}g'(x) \tag{1} \]

证明考虑

\[\def\res{\operatorname{res}} [x^n]\Phi(f(x)) = \res\left(\frac{\Phi(f(x))}{x^{n + 1}}\right)=\res\left(\frac{\Phi(f(g(x)))g'(x)}{g^{n + 1}(x)}\right) = [x^{-1}]\frac{\Phi(x)g'(x)}{g^{n + 1}(x)} \]

关于为何引入形式 Laurent 级数能简化该问题,笔者猜测,此处巧妙运用了形式 Laurent 级数的 求导算子 的性质.

常用的结论是该式的等价形式

\[[x^n] \Phi(f(x)) = \frac1{n}[x^{-1}]\frac{\Phi'(x)}{g(x)^n} = \frac1{n}[x^{n-1}]\Phi'(x)\left(\frac{g(x)}{x}\right)^{-n} \tag{2} \]

考虑

\[\def\res{\operatorname{res}} \res\left(\frac{\Phi'(x)}{g(x)^n} - n\frac{\Phi(x)g'(x)}{g^{n + 1}(x)}\right) = \res\left(\left(\frac{\Phi(x)}{g^n(x)}\right)'\right)=0 \]

易证.

下文中,我们称式 \((2)\) 为 Lagrange 反演,称式 \((1)\) 为另类 Lagrange 反演

来一点例题

有标号有根树计数

考虑 egf,有 \(f(x) = x\exp{f(x)}\).

相当于求 \(g(x) = xe^{-x}\) 的复合逆.

套用 Lagrange 反演得

\[[x^n]f(x) = \frac1{n}[x^{n-1}](e^{nx}) = \frac{n^{n-1}}{n!} \]

幂的横截

给出多项式 \(g\) 的复合逆 \(f\),对 \(k=1\sim n\) 求出 \([x^n]g^k(x)\).

套用 Lagrange 反演,得

\[[x^n] g^k(x) = \frac{k}{n}[x^{n-1}]x^{k-1}\left(\frac{f(x)}{x}\right)^{-n} = \frac{k}{n}[x^{n-k}]\left(\frac{f(x)}{x}\right)^{-n} \]

于是多项式快速幂计算 \(\left(\frac{f(x)}{x}\right)^{-n}\) 即可.

ABC345G

可以转化为对于 \(d=1\sim n\) 求出 \(a_d=\sum\limits_{i=0}^{n-1}[x^i]\left(\frac1k\sum\limits_{j=1}^kx^j\right)^d\),之后对 \({a_d}\) 差分一下即得答案.

\(g(x) =\frac1{k}\sum_{i=1}^kx^i = \frac{1-x^{k+1}}{k-kx}\),牛迭出 \(g\) 的复合逆 \(f\),套用另类拉格朗日反演,得

\[[x^i]g^d = [x^i] x^d\left(\frac{g}{x}\right)^{-i-1}g'=[x^{-d-1}]\left(\frac1{g}\right)^{i+1}g' \]

于是

\[\begin{aligned} a_d =&\sum_{i=0}^{n-1}[x^i]g^d\\ =&\sum_{i=0}^{n-1}[x^{-d-1}]\left(\frac1{g}\right)^{i+1}g'\\ =&[x^{-d-1}]g'\sum_{i=0}^{n-1}\left(\frac1{g}\right)^{i+1}\\ =&[x^{-d-1}]\frac{g'(1-g^n)}{g^n(1-g)}\\ =&[x^{n-d-1}]\left(\frac{g}{x}\right)^n\frac{g'(1-g^n)}{1-g} \end{aligned} \]

\(\displaystyle{\left(\frac{g}{x}\right)^n\frac{g'(1-g^n)}{1-g}}\) 的每一项都没有负次项,可以直接求出来,之后就可以求出 \({a_d}\) 了.

阅读 hos_lyric 佬的代码后发现没有项 \(g^n\),这是因为 \(g^n \equiv 0\pmod{x^n}\).

时间复杂度 \(\mathcal{O}(n\log n)\).

最新最热科技!

给出 \(n\) 次多项式 \(f\),求出 \(n\) 次多项式 \(g\) 使得 \(f(g(x)) \equiv x\pmod{x^{n+1}}\),保证 \([x^0] f(x) = 0\land [x^1] f(x) \not= 0\).

\(v = [x^1] f(x), f_0 = \dfrac{f}{v}\),依 Lagrange 反演有

\[\begin{aligned} [x^n]f^k(x) &= \frac{k}{n}[x^{n-1}]x^{k-1}\left(\frac{g(x)}{x}\right)^{-n}\\ [x^n]f_0^k(x) &= \frac{k}{nv^k}[x^{n-k}]\left(\frac{g(x)}{x}\right)^{-n}\\ \frac{nv^k}{k}x^{n-k}\left([x^n]f_0^k(x)\right) &= x^{n-k}\left([x^{n-k}]\left(\frac{g(x)}{x}\right)^{-n}\right)\\ \left(\frac{g(x)}{x}\right)^{-n}&=\sum_k\frac{nv^k}{k}x^{n-k}\left([x^n]f_0^k(x)\right)\\ g(x)&=x\left(\sum_k\frac{nv^k}{k}x^{n-k}\left([x^n]f_0^k(x)\right)\right)^{-1/n}\\ g(x)&=\frac{x}{v}\left(\sum_k\frac{n}{kv^{n-k}}x^{n-k}\left([x^n]f_0^k(x)\right)\right)^{-1/n} \end{aligned} \]

此时发现括号内是一个常数项为 \(1\) 的多项式,开方是简单的,问题变为对于 \(k=0\sim n\),求出 \([x^n]f_0^k(x)\).

可以转化为求 \([x^n]\dfrac{1}{1-yf_0}\),求解分式第 \(n\) 项,可以考虑 Bostan-Mori 算法.

该算法原理大致如下

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

容易发现分母多项式只有偶次项处有值,于是取多项式 \(g_0, f_0, f_1\) 满足 \(g_0(x^2)=g(x)g(-x), f_0(x^2)+xf_1(x^2) = f(x)g(-x)\),则有

\[[x^n] \frac{f(x)}{g(x)} = [x^n]\frac{f(x)g(-x)}{g(x)g(-x)}=[x^n]\frac{f_0(x^2)}{g_0(x^2)}+ x\frac{f_1(x^2)}{g_0(x^2)} \]

根据 \(n\) 的奇偶性,\(x^n\) 只在 \(\dfrac{f_0(x^2)}{g_0(x^2)}\)\(x\dfrac{f_1(x^2)}{g_0(x^2)}\) 中的其中一项有值,于是可以递归处理问题.

推广到二元的情况即为

\[[x^n] \frac{f(x, y)}{g(x, y)} = [x^n]\frac{f(x, y)g(-x, y)}{g(x, y)g(-x, y)}=[x^n]\frac{f_0(x^2, y)}{g_0(x^2, y)}+ x\frac{f_1(x^2, y)}{g_0(x^2, y)} \]

发现每递归一次,\(x\) 的次数减小为原来的一半,而 \(y\) 的次数翻倍,因此在每一层,整个二元多项式都只有 \(\mathcal{O}(n)\) 项.

于是可以 \(\mathcal{O}(n\log^2n)\) 地解决多项式复合逆问题.

posted @ 2024-04-12 00:30  wiki0922  阅读(18)  评论(0编辑  收藏  举报