矩陣快速冪 數列考驗

2021-10-06 10:44:56 字數 1014 閱讀 5257

題面:

當 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。

現在給定 a0~a9,以及兩個正整數 k m,詢問 f(k) % m 的數值大小

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

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

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

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

sample intput:

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

思路:因為資料量比較大,所以使用矩陣快速冪來求解

根據題目要求,只要根據輸入初始化原始矩陣並且 k-9 的快速冪操作並最終得出要求的f %m即可

#include

#include

#include

using

namespace std;

int n=10;

int k,m;

struct matrix

matrix

(matrix& ma)

matrix operator*(

const matrix& ma)

const}}

return temp;

}static matrix quick_pow

(matrix a,

int x)

return temp;}}

;int

main()

}printf

("%d\n"

,ans);}

return0;

}

fibonacci數列矩陣快速冪

對於矩陣 1 1 1 0 的n次冪,第一行第二個元素 右上角 的元素即為fibonacci數列的第n項,由此可以根據矩陣的乘法計算fibonacci數列的元素值 矩陣的快速冪利用的也是冪乘的二分法,只不是換成了矩陣的乘法,可以用函式處理。可以定義乙個二維陣列的結構體 typedef struct m...

Fibonacci數列(矩陣乘法快速冪)

題目描述 定義 f0 f1 1,fn fn 1 fn 2 n 2 稱為fibonacci數列。輸入n,求fn mod q。其中1 q 30000。輸入描述 第一行乙個數t 1 t 10000 以下t行,每行兩個數,n,q n 109,1 q 30000 輸出描述 檔案包含t行,每行對應乙個答案。樣例...

Fibonacci數列 利用矩陣快速冪

fibonacci數列就形如 0,1,1,2,3,5,8,13,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 可以看出 第1項為0,第2項為1,第三項為1,第四項為2 第三項 第二項,第n項 第 n 1 項 第 n 2 項 即 f n f n 1 f n 2 設 a為m p 的矩陣,b為p ...