題面:
當 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 ...