多项式复合逆
对于形式幂级数 \(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)\) 地解决多项式复合逆问题.