常系数齐次线性递推

题目链接

题目描述

数列 { a n } \{a_n\} { an}满足 k k k阶线性递推关系: a n = ∑ i = 1 k f i a n − i ( n ≥ k ) a_n=\sum_{i=1}^kf_ia_{n-i} (n\ge k) an=i=1kfiani(nk)

现给定 n , k n,k n,k以及 f 1 , f 2 , . . . , f k , a 0 , a 1 , . . . , a k − 1 f_1,f_2,...,f_k,a_0,a_1,...,a_{k-1} f1,f2,...,fk,a0,a1,...,ak1,求 a n m o d    998244353 a_n \mod 998244353 anmod998244353的值。

数据范围

n ≤ 1 0 9 , k ≤ 32000 n\le 10^9, k\le 32000 n109,k32000

思路

F = [ 0 1 . . . 0 0 0 ⋱ 0 0 0 . . . 1 f k f k − 1 . . . f 1 ] F=\begin{bmatrix}0&1&...&0\\0&0&⋱&0\\0&0&...&1\\f_{k}&f_{k-1}&...&f_1\end{bmatrix} F=000fk100fk1.........001f1
[ a n a n + 1 . . . a n + k − 1 ] = F n [ a 0 a 1 . . . a k − 1 ] \begin{bmatrix}a_n\\a_{n+1}\\...\\a_{n+k-1}\end{bmatrix}=F^n\begin{bmatrix}a_0\\a_1\\...\\a_{k-1}\end{bmatrix} anan+1...an+k1=Fna0a1...ak1
F F F的特征多项式为 g ( λ ) = ∣ λ I − F ∣ = λ k − ∑ i = 1 k f i λ k − i g(\lambda)=|\lambda I-F|=\lambda^k-\sum_{i=1}^kf_i\lambda^{k-i} g(λ)=λIF=λki=1kfiλki
根据代数基本定理,可以把 g ( λ ) g(\lambda) g(λ)表示为 g ( λ ) = ∏ i = 1 t ( λ − λ i ) m i g(\lambda)=\prod_{i=1}^t(\lambda-\lambda_i)^{m_i} g(λ)=i=1t(λλi)mi,其中 λ i \lambda_i λi各不相同,且 ∑ i = 1 t m i = k \sum_{i=1}^t m_i=k i=1tmi=k
因此 a n = ∑ i = 1 t λ i n ( ∑ j = 1 m i c i j n j − 1 ) a_n=\sum_{i=1}^t\lambda_i^n(\sum_{j=1}^{m_i}c_{ij}n^{j-1}) an=i=1tλin(j=1micijnj1),其中 c i j c_{ij} cij可以通过待定系数法确定。
但是 λ i \lambda_i λi咋解? c i j c_{ij} cij咋求?好像有点麻烦。

这时,还需要用到Hamilton-Cayley定理—— g ( F ) = F k − ∑ i = 1 k f i F k − i = O g(F)=F^k-\sum_{i=1}^kf_iF^{k-i}=O g(F)=Fki=1kfiFki=O

r ( λ ) = λ n m o d    g ( λ ) = ∑ i = 0 k − 1 r i λ i r(\lambda)=\lambda^n\mod g(\lambda)=\sum_{i=0}^{k-1}r_i\lambda^i r(λ)=λnmodg(λ)=i=0k1riλi
[ a n a n + 1 . . . a n + k − 1 ] = r ( F ) [ a 0 a 1 . . . a k − 1 ] \begin{bmatrix}a_n\\a_{n+1}\\...\\a_{n+k-1}\end{bmatrix}=r(F)\begin{bmatrix}a_0\\a_1\\...\\a_{k-1}\end{bmatrix} anan+1...an+k1=r(F)a0a1...ak1
a n = ∑ i = 0 k − 1 r i a i a_n=\sum_{i=0}^{k-1}r_ia_i an=i=0k1riai

总结一下:

  1. 求出递推关系的特征多项式 g ( λ ) = λ k − ∑ i = 1 k f i λ k − i g(\lambda)=\lambda^k-\sum_{i=1}^kf_i\lambda^{k-i} g(λ)=λki=1kfiλki
  2. 求出 r ( λ ) = λ n m o d    g ( λ ) = ∑ i = 0 k − 1 r i λ i r(\lambda)=\lambda^n\mod g(\lambda)=\sum_{i=0}^{k-1}r_i\lambda^i r(λ)=λnmodg(λ)=i=0k1riλi。这一步需要多项式快速幂+取模。
  3. 求出 a n = ∑ i = 0 k − 1 r i a i a_n=\sum_{i=0}^{k-1}r_ia_i an=i=0k1riai
全部评论

相关推荐

04-13 18:10
门头沟学院 Java
想熬夜的小飞象在秋招:被腾讯挂了后爸妈以为我失联了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务