對於常係數齊次線性遞推,比較現代的做法是寫成 \([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\) 的特徵多項式,做多項式帶餘除法 \(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