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}\) 即可。

浙公网安备 33010602011771号