常係數齊次線性遞推

2022-05-31 17:03:09 字數 1703 閱讀 9173

見洛谷模板題。

有個數列\(\),給出前\(k\)項,即\(a_0,a_1,\dots,a_\)

對於後面的所有\(a_n\)有\(a_n=\sum_^f_ia_\)

\(f\)給出。

小學生:直接幹。

初中生:矩陣乘法。

現在設\(a\)為轉移矩陣。列向量\(\vec v=(a_,a_,\dots,a_0)\),滿足\(a\vec v=(a_,a_,\dots,a_1)\)

我們要求\(a^n\vec v\)中的第\(k\)項。

先介紹一些奇奇怪怪的東西(以下的東西不帶嚴謹證明)

對於乙個矩陣\(a\),如果能找到乙個數\(\lambda\)和乙個列向量\(\overline v\),滿足\(\lambda\vec v=a\vec v\),那麼分別稱它們是一組特徵值特徵向量

移項得\((\lambda e-a)\vec v=0\)

這個方程滿足當且僅當\(\det(\lambda e -a)=0\)(不會證)

\[\lambda e-a= \left(

\lambda-a_1 & -a_2 & \cdots &-a_ & -a_m \\

-1 & \lambda & \cdots & 0 &0 \\

0 & -1 &\cdots & 0 & 0\\

\vdots & \vdots & \ddots & \vdots &\vdots \\

0 & 0 & \cdots & -1 & \lambda

\end

}\right)\]

用點基本的數學知識可以算出\(\det(\lambda e-a)=\lambda^k-\sum_^a_\lambda^i\)

我們可以將其看作乙個關於\(\lambda\)的多項式(叫特徵多項式),記作\(g(\lambda)\)。

cayley-hamilton定理:\(g(a)=o\)(\(o\)表示全\(0\)的矩陣)

(感性理解:\(ae-a=0\),所以這個東西成立。當然這樣證明顯然是不對的)

將\(a\)替代\(\lambda\),可以看做乙個矩陣的多項式。並且顯然每一項底數為\(a\)的兩個多項式相乘符合交換律。

考慮除法,形如\(a^n=p(a)g(a)+q(a)\)

由於\(g(a)=o\),所以\(a^n=q(a)\)

現在我們就真把它當多項式來算。我們計算\(q(x)\equiv x^n \pmod \)

用倍增+多項式取模算出\(q(x)\)的每一項的係數。

現在我們要求\((a^n\vec v)_m\),即\(\sum_^q_i(a^i\vec v)_m=\sum_^q_ia_i\)

於是做完了。總時間複雜度\(o(k\lg k \lg n)\)。

using namespace std;

#include #include #include #define n 65536

#define mo 998244353

#define ll long long

ll qpow(ll x,ll y=mo-2)

int n,k;

int a[n],f[n];

int nn,re[n];

void setlen(int n) }}

int main()

常係數齊次線性遞推

給定遞推式 f n a 1f a 2 f a k f 給定 f 0,f 1.f k 求 f n 先定義 f n 的特徵方程 c x x a 1 x a 2 x a x a k 由基本代數定理,c x 0 的解 稱為特徵根 有 k 個,設為 alpha 1 alpha 2.alpha k 有 f n ...

模板 常係數齊次線性遞推

題目傳送門 給出 k,a f 存在 forall n k wedge n in mathbb,exists a n sum f ka 給出 n 求出 a n n le 10 9,k le 32000 以下部分借鑑了 bjpers2 的題解 恭喜您!您獲得了 theta k 3 log n 的時間複雜...

線性常係數齊次遞推總結

本文為作者的一些理解,如有錯誤之處請指出。其實就是這樣乙個式子 a n alpha 1a alpha 2a alpha 3a alpha ka 因為它是線性的,沒有高次的項,而且次數都相等,沒有一些不是常數的奇怪函式夾在裡面 所以它叫這個名字 還有它的特徵方程是 x k alpha 1x alpha...