矩陣快速冪 求解常係數齊次線性遞推式

2021-09-25 04:55:20 字數 2800 閱讀 3406

先說矩陣a的n次冪(an)的快速冪的求法

因為矩陣乘滿足結合律,所以矩陣的快速冪和前面普通快速冪原理都一樣,主要在於矩陣乘法的運算

1.1 直接模擬矩陣乘(m行)

用結構體存矩陣(乙個結構體可以直接賦值另乙個結構體)

struct mat

;mat init=mat

;

mat mul

(mat a,mat b)

所以a,b兩個矩陣相乘就可以呼叫函式mul===>mul(a,b)

1.2 過載*號,

c++的運算子過載

mat operator *

(const mat &x,

const mat &y)

//過載運算子

或者:

struct mat

return ans;}}

;

現在a,b兩個矩陣就可以直接相乘了===>a*b

以 fibonacci 數列為例:

數列中 f0 = 0,f1 = 1, fn = fn−1 + fn−2 ,它有兩個單項式,我們就可以構造乙個2行2列的矩陣,利用矩陣的乘法求fn,我們先寫出它的下一項

然後現在來填構造矩陣,因為fn = 1* fn−1 +1* fn−2 ,所以第一列都是1

因為fn-1 = 1* fn−1 +0* fn−2 ,所以第二列分別是1,0

然後我們用矩陣算f3

f3 = f2 + f1

f4 = f3 + f2 ∣f2

f100

∣\begin f~2~ & f~1~ \\ 0&0 \\ \end

∣∣∣∣​f

20​f

10​∣

∣∣∣​

∣ 11

10∣\begin 1 &1 \\ 1&0 \\ \end

∣∣∣∣​1

1​10

​∣∣∣

∣​=∣ f3

f200

∣\begin f~3~ & f~2~ \\ 0&0 \\ \end

∣∣∣∣​f

30​f

20​∣

∣∣∣​

即:∣110

0∣\begin 1 &1 \\ 0&0 \\ \end

∣∣∣∣​1

0​10

​∣∣∣

∣​∣ 11

10∣\begin 1 &1 \\ 1&0 \\ \end

∣∣∣∣​1

1​10

​∣∣∣

∣​=∣ f3

f200

∣\begin f~3~ & f~2~ \\ 0&0 \\ \end

∣∣∣∣​f

30​f

20​∣

∣∣∣​

所以fn就等於矩陣∣f2

f100

∣\begin f~2~ & f~1~ \\ 0&0 \\ \end

∣∣∣∣​f

20​f

10​∣

∣∣∣​

乘以矩陣∣11

10∣\begin 1 &1 \\ 1&0 \\ \end

∣∣∣∣​1

1​10

​∣∣∣

∣​的n-2次冪

**:poj 3070

#include

#include

#include

using namespace std;

typedef

long

long ll;

const

int mod =

1e4;

struct mat

;mat init=mat

;mat init1=mat

;//單位矩陣

mat operator *

(const mat &x,

const mat &y)

//過載運算子

常係數齊次線性遞推

給定遞推式 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 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 我們要求 ...

模板 常係數齊次線性遞推

題目傳送門 給出 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 的時間複雜...