Bostan-Mori

常系数齐次线性递推可以转换成求分式的一项系数。设对 \(n\ge k\) 有递推关系 \(a_n=\sum\limits_{i=1}^ka_{n-i}c_i\)

\(F=1-\sum\limits_{i=1}^kc_ix^i,G=(\sum\limits_{i=0}^{k-1} a_ix^i)F\bmod x^k\),则 \(a_n=[x^n]\frac{G}{F}\)

Bostan-Mori

\[[x^n]\frac{G}{F}=[x^n]\frac{G(x)F(-x)}{F(x)F(-x)} \]

由于 \(F(x)F(-x)\) 的奇数项系数必定为 \(0\),因此 \(G(x)F(-x)\) 的奇数项和偶数项独立。

\(F'(x^2)=F(x)F(-x)\)\(xG_{odd}(x^2)+G_{even}(x^2)=G(x)F(-x)\),则

\[[x^n]\frac{G}F=\begin{cases} [x^\frac{n-1}{2}]\frac{G_{odd}}{F'}&n\text{ is odd}\\ [x^\frac{n}{2}]\frac{G_{even}}{F'}&n\text{ is even} \end{cases} \]

据此可以减半问题规模,在 \(\mathcal O(k\log n\log k)\) 的时间内解决问题。(注意多项式长度不变)

ABC300Ex

直接用 Bostan-Mori 求解。注意到 \(n\) 最低位为 \(1\) 时所求项最低位既可以是 \(1\) 也可以是 \(0\),故令 \(G'\gets G_{odd}+G_{even}\) 即可。

posted @ 2025-06-05 16:22  Nikrot  阅读(23)  评论(0)    收藏  举报