矩陣快速冪核心模板 例題

2021-10-06 08:44:14 字數 1784 閱讀 2692

矩陣乘法:

矩陣 a,b 的大小分別為 a x b 和 b x c

設 c = ab,則 c 的大小為 a x c

一般我們只考慮方陣,即 a、b 的大小都是 n x n

對於矩陣快速冪,記個板子就好。推薦封裝成乙個結構體並且過載乘法運算子。

問題引入:

給定矩陣 a,請快速計算出 a^n(n 個矩陣 a 相乘)的結果,輸出的每個數都 % p

所有的矩陣快速冪都是只需找到求解的線性遞推關係即可。就是類似這樣的等式:

如果上述的明白了,那麼

例題:q老師 對數列有一種非同一般的熱愛,尤其是優美的斐波那契數列。

這一天,q老師 為了增強大家對於斐波那契數列的理解,決定在斐波那契的基礎上建立乙個新的數列 f(x) 來考一考大家。數列 f(x) 定義如下:

當 x < 10 時,f(x) = x;

當 x ≥ 10 時,f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10),ai 只能為 0 或 1。

q老師 將給定 a0~a9,以及兩個正整數 k m,詢問 f(k) % m 的數值大小。

聰明的你能通過 q老師 的考驗嗎?

input

輸出檔案包含多組測試用例,每組測試用例格式如下:

第一行給定兩個正整數 k m。(k < 2e9, m < 1e5)

第二行給定十個整數,分別表示 a0~a9。

output

對於每一組測試用例輸出一行,表示 f(k) % m 的數值大小。

sample input

10 9999

1 1 1 1 1 1 1 1 1 1

20 500

1 0 1 0 1 0 1 0 1 0

sample output

45104

經過分析不難得出所需求的是陣列:

的冪次方。

ac**:

#include

#include

#include

using

namespace std;

int k,mod;

int a[15]

;struct matrix}}

return ret;

}matrix()

};matrix solve

(matrix a,

int x)

return ret;

}int

main()

return0;

}

矩陣快速冪 例題 模板

觀察上式可以得出下面等價方程組 很明顯可以構造乙個矩陣 構造矩陣為 將左邊的矩陣乘n 1次 include using namespace std typedef long long llt const int cube size 3 矩陣大小 struct cube 單位矩陣 cube unitc...

矩陣快速冪(模板 例題)

矩陣快速冪推導過程 矩陣快速冪求解數列第n項的關鍵在於計算係數矩陣a。之後就是套模板了。模板 求解斐波那契數列第n項 include include define ll long long define mod 2147493647 using namespace std struct mat ma...

矩陣快速冪模板 例題

矩陣快速冪這個演算法,理解起來很容易,但是我之前自己寫的 有bug,也是因為上課不聽課,對形參和實參沒理解,平常用的都是全域性變數,是不是實參影響不大,這次定義乙個結構體的矩陣,矩陣需要初始化為0,然後,因為形參和實參沒怎麼理解,導致輸出的答案差異很大,前提是矩陣快速冪,矩陣需要初始化陣列,並不會預...