一、矩阵乘法
1 struct datatype
2 {
3 int a[2][2];
4 };
5 datatype multiple(datatype x,datatype y)
6 {
7 datatype res;
8 memset(res.a,0,sizeof(res.a));
9 for(int i=0;i<=1;i++)
10 {
11 for(int j=0;j<=1;j++)
12 {
13 for(int k=0;k<=1;k++)
14 {
15 res.a[i][j]+=x.a[i][k]*y.a[k][j];
16 }
17 }
18 }
19 for(int i=0;i<=1;i++)
20 {
21 for(int j=0;j<=1;j++)
22 {
23 res.a[i][j]%=10000;
24 }
25 }
26 return res;
27 }
二、矩阵链乘的快速幂优化
1 struct datatype
2 {
3 int a[2][2];
4 };
5 datatype multiple(datatype x,datatype y)
6 {
7 datatype res;
8 memset(res.a,0,sizeof(res.a));
9 for(int i=0;i<=1;i++)
10 {
11 for(int j=0;j<=1;j++)
12 {
13 for(int k=0;k<=1;k++)
14 {
15 res.a[i][j]+=x.a[i][k]*y.a[k][j];
16 }
17 }
18 }
19 for(int i=0;i<=1;i++)
20 {
21 for(int j=0;j<=1;j++)
22 {
23 res.a[i][j]%=10000;
24 }
25 }
26 return res;
27 }
28 datatype power(datatype x,int y)
29 {
30 datatype res,t;
31 res.a[0][0]=1;
32 res.a[0][1]=0;
33 res.a[1][0]=0;
34 res.a[1][1]=1;
35 t=x;
36 while(y)
37 {
38 if(y&1)
39 {
40 res=multiple(res,t);
41 }
42 t=multiple(t,t);
43 y>>=1;
44 }
45 return res;
46 }