Note - 多项式乱写
作者:互联网
大概是记录 @Tiw 的伟大智慧叭。
常系数齐次线性递推
Link.
求:一个满足 \(m\) 阶齐次线性递推数列 \(\{a\}\) 的第 \(n\) 项,即求
\[a_n=\sum_{i=1}^mf_ia_{n-i} \]不用多项式取模的做法。
根据条件式子得到:
\[A(x)=F(x)A(x)+P(x) \]\(P(x)\) 某个多项式,用于修补低次项。
变形:
\[\begin{aligned}A(x)&=F(x)A(x)+P(x)\\\Rightarrow~~~~A(x)&=\frac{P(x)}{Q(x)}~~~~\text{let } Q(x)=1-F(x)\\\Rightarrow~~~~A(x)&=\frac{P(x)Q(-x)}{Q(x)Q(-x)}\end{aligned} \]对于任意奇数 \(k\),考虑 \(Q(x)Q(-x)\) 的 \(k\) 次项:
\[[x^k]Q(x)Q(-x)=\sum_{i=0}^k(-1)^iq_iq_{k-i} \]由于 \(2\not|k\),故 \((-1)^iq_iq_{k-i}+(-1)^{k-i}q_{k-i}q_i=0\),原式为 \(0\),即 \(Q(x)Q(-x)\) 仅含偶次项。不妨令 \(R(x^2)=Q(x)Q(-x)\),代入变形:
\[\begin{aligned}A(x)&=\frac{P(x)Q(-x)}{R(x^2)}\\\Rightarrow A(x)&=\frac{E(x^2)}{R(x^2)}+x\frac{O(x^2)}{R(x^2)}~~~~\text{let }\begin{cases}E(x)=\sum_i [x^{2i}]P(x)Q(-x)\cdot x^i\\O(x)=\sum_i [x^{2i+1}]P(x)Q(-x)\cdot x^i\end{cases}\end{aligned} \]我们要求的只是 \([x^n]A(x)\) 而非整个 \(A(x)\),所以只需要根据 \(n\) 的奇偶性递归到其中一边求解。复杂度仍然是 \(\mathcal O(m\log m\log n)\),不过常数会小很多。
此算法基础上的更多卡常技巧请见 EI 的博客。
标签:begin,frac,乱写,多项式,sum,Note,iq,end,aligned 来源: https://www.cnblogs.com/rainybunny/p/14406155.html