古法求解常系数齐次线性递推
对于常系数齐次线性递推,比较现代的做法是写成 \([x^N]\frac{P(x)}{Q(x)}\) 的形式,用 Bostan-Mori 在 \(O(k\log k\log N)\) 时间内直接算出来。最近学习了 Cayley-Hamilton 定理,顺便推了一下求解这个问题比较古代的做法。
- Cayley-Hamilton 定理
对任意域 \(F\) 和矩阵 \(A\in M_{n\times n}(F)\),考虑其特征多项式 \(f(x)=\det(xI_{n\times n}-A)\in F[x]\),有 \(f(A)=0_{n\times n}\)。
证明:考虑伴随矩阵 \((xI-A)^{\lor}\),有 \((xI-A)\times (xI-A)^{\lor}=\det(xI-A)\times I\)
- 这里的 \(xI-A,(xI-A)^{\lor}\) 都是 \(M_{n\times n}(F[x])\) 中的元素,带入 \(x=A\) 的结果并不是 \(0_{n\times n}\)
设其特征多项式 \(f(x)=c_0+c_1x+\cdots+c_{n-1}x^{n-1}+x^n\),注意到 \((xI-A)^{\lor}\) 里面 \(x\) 的多项式的次数不会高于 \(n-1\),则存在 \(n\) 个矩阵 \(D_0,D_1,\cdots,D_{n-1}\in M_{n\times n}(F)\),有 \((xI-A)^{\lor}=D_0+D_1x+\cdots+D_{n-1}x^{n-1}\)
于是有 \((xI-A)\times(D_0+D_1x+\cdots+D_{n-1}x^{n-1})=(c_0+c_1x+\cdots +c_{n-1}x^{n-1}+x^n)I\)
对比 \(x^k\) 项系数,左边为 \(-AD_k+D_{k-1}\)(\(k=0\) 时为 \(-AD_0\)),右边为 \(c_kI\)
将 \(x^k\) 项系数乘上 \(A^k\) 求和(注意,这并不是在带入 \(x=A\)),即得 Cayley-Hamilton 定理。
实际上有更进一步的结论
将 \(x^k\) 项系数(\(k\ge 1\))乘上 \(A^{k-1}\) 求和,左边得到 \(D_0\),右边得到 \(c_1+c_2A+\cdots+c_{n-1}A^{n-2}+A^{n-1}\)
另一方面,\(D_0=[x^0](xI-A)^{\lor}=(-A)^{\lor}=(-1)^{n-1}A^{\lor}\),于是有
这个可以直接推出 C-H 定理:
显然 \(c_0=[x^0]\det (xI-A)=\det(-A)=(-1)^n\det A\),于是
那么众所周知对于这个题,可以写出一个矩阵 \(A\in M_{k\times k}(\mathbb F_{998244353})\) 和一个初值向量 \(v_{0\cdots k-1}\)
问题就化为计算 \((A^nv)_0\)
设 \(f=\text{Char}_A\) 为 \(A\) 的特征多项式(\(A\) 的形式很特殊,\(\text{Char}_A\) 很好计算),做多项式带余除法 \(x^n=f(x)p(x)+r(x)\),则有
其中 \(\deg r\le k-1\)。设 \(r(x)=\sum_{i=0}^{k-1}b_ix^i\)
那么 \((A^nv)_0=(r(A)v)_0=\sum_{i=0}^{k-1}b_i(A^iv)_0\)
这里因为当 \(i\le k-1\) 时 \((A^iv)_0\) 实际上就是 \(v_i\),所以上面那个可以直接算出来
于是我们只需要计算 \(x^n\bmod f(x)\)
这里可以快速幂计算,如果已知 \(x^m\equiv r(x)\pmod{f(x)}\),那么 \(x^{2m}\equiv r(x)^2\pmod{f(x)}\),所以我们相当于要不断做一个 \(2k-2\) 次多项式对一个 \(k\) 次多项式取模这个事情。这个当然可以做到 \(O(k\log k)\)。
那么总复杂度就是 \(O(k\log k\log n)\)。
多项式取模:
我们设 \(f^R\) 表示翻转 \(f\) 的系数,形式化地有 \(f^R(x)=x^{\deg f}f(\frac{1}{x})\),那么假如要算 \(f(x)\bmod g(x)\),那么有 \(f(x)=p(x)g(x)+r(x)\),这里我们在 \(r(x)\) 前面补 \(0\),强制令 \(\deg r=\deg g-1\),则
于是有 \(f^R\equiv p^Rg^R\pmod{x^{\deg f-\deg g+1}}\),于是我们把 \(f^R,g^R\) 分别对 \(x^{\deg f-\deg g+1}\) 取模,然后计算 \(\frac{1}{g^R}\pmod {x^{\deg f-\deg g+1}}\),那么就能算出 \(p^R\),进而得到 \(r^R\)。复杂度是求逆的复杂度,也就是 1log

浙公网安备 33010602011771号