這就是一道模板題,題目都很清楚的說了這是快速冪。
其實和快速冪差不多,不過有乙個地方要注意
快速冪中 ans
ansan
s 一般賦值為 1
11 ,目的是為了讓 ans
ansan
s 在第一次運算的時候可以直接得到值。
但是在矩陣乘法時我們應該用什麼來達到目的呢?
最簡單的做法就是在第一次進行 ans
ansan
s 的運算時,特判再賦值
但是還有乙個想法:
乙個矩陣乘了另乙個矩陣後能得到原來矩陣,這個矩陣會是什麼?如:∣12
34
∣\begin1 & 2\\3 &4\end
∣∣∣∣1
324
∣∣∣
∣我們往回退,得:
∣ 10
01
∣\begin1 & 0\\0 &1\end
∣∣∣∣1
001
∣∣∣
∣驗證一下發現也正確。
如此,快速冪即可
#include
#include
#include
#define lzh using
#define ak namespace
#define ioi std
lzh ak ioi;
const
int mod=
9973
;int n;
int a[4]
[4];
int ans[4]
[4];
int t[4]
[4];
void
add(
)voidcf(
)void
ksm(
int b)
}int
main()
a[1][
1]=0
,a[1][
2]=1
,a[1][
3]=0
; a[2]
[1]=
1,a[2]
[2]=
1,a[2]
[3]=
0;a[3][
1]=0
,a[3][
2]=1
,a[3][
3]=1
;ksm
(n-2);
cout<<
(ans[1]
[2]+ans[2]
[2]+ans[3]
[2])
%mod<}
luogu P3390 模板 矩陣快速冪
矩陣快速冪 給定n n的矩陣a,求a k 第一行,n,k 第2至n 1行,每行n個數,第i 1行第j個數表示矩陣第i行第j列的元素 輸出a k 共n行,每行n個數,第i行第j個數表示矩陣第i行第j列的元素,每個元素模10 9 7 2 11 1 1 11 1 1 1說明 n 100,k 10 12,矩...
P3390 模板 矩陣快速冪
矩陣快速冪 給定n n的矩陣a,求a k 輸入格式 第一行,n,k 第2至n 1行,每行n個數,第i 1行第j個數表示矩陣第i行第j列的元素 輸出格式 輸出a k 共n行,每行n個數,第i行第j個數表示矩陣第i行第j列的元素,每個元素模10 9 7 輸入樣例 1 2 1 1 11 1 輸出樣例 1 ...
P3390 模板 矩陣快速冪
題目背景 矩陣快速冪 題目描述 給定n n的矩陣a,求a k 輸入輸出格式 輸入格式 第一行,n,k 第2至n 1行,每行n個數,第i 1行第j個數表示矩陣第i行第j列的元素 輸出格式 輸出a k 共n行,每行n個數,第i行第j個數表示矩陣第i行第j列的元素,每個元素模10 9 7 輸入輸出樣例 輸...