@@ -12,17 +12,22 @@ public static void main(String[] args) {
1212 System .out .println ("矩阵乘法展示结束" );
1313 System .out .println ();
1414 System .out .println ("f2() : " );
15+ System .out .println ("矩阵快速幂展示开始" );
16+ f2 ();
17+ System .out .println ("矩阵快速幂展示结束" );
18+ System .out .println ();
19+ System .out .println ("f3() : " );
1520 System .out .println ("求斐波那契数列第n项" );
1621 System .out .println ("用矩阵乘法解决" );
1722 System .out .println ("展示开始" );
18- f2 ();
23+ f3 ();
1924 System .out .println ("展示结束" );
2025 System .out .println ();
21- System .out .println ("f3 () : " );
26+ System .out .println ("f4 () : " );
2227 System .out .println ("求斐波那契数列第n项" );
2328 System .out .println ("用矩阵快速幂解决" );
2429 System .out .println ("展示开始" );
25- f2 ();
30+ f4 ();
2631 System .out .println ("展示结束" );
2732 System .out .println ();
2833 }
@@ -45,6 +50,7 @@ public static int[][] multiply(int[][] a, int[][] b) {
4550 }
4651
4752 // 矩阵快速幂
53+ // 要求矩阵m是正方形矩阵
4854 public static int [][] power (int [][] m , int p ) {
4955 int n = m .length ;
5056 int [][] ans = new int [n ][n ];
@@ -119,9 +125,20 @@ public static void f1() {
119125 int [][] ans4 = multiply (g , h );
120126 print (ans4 );
121127 }
128+
129+ public static void f2 () {
130+ // 只有正方形矩阵可以求幂
131+ int [][] a = { { 1 , 2 }, { 3 , 4 } };
132+ // 连乘得到矩阵a的5次方
133+ int [][] b = multiply (a , multiply (a , multiply (a , multiply (a , a ))));
134+ print (b );
135+ System .out .println ("======" );
136+ // 矩阵快速幂得到a的5次方
137+ print (power (a , 5 ));
138+ }
122139
123140 // 用矩阵乘法解决斐波那契第n项的问题
124- public static void f2 () {
141+ public static void f3 () {
125142 // 0 1 1 2 3 5 8 13 21 34...
126143 // 0 1 2 3 4 5 6 7 8 9
127144 int [][] start = { { 1 , 0 } };
@@ -159,7 +176,7 @@ public static void f2() {
159176 }
160177
161178 // 用矩阵快速幂解决斐波那契第n项的问题
162- public static void f3 () {
179+ public static void f4 () {
163180 // 0 1 1 2 3 5 8 13 21 34...
164181 // 0 1 2 3 4 5 6 7 8 9
165182 int [][] start = { { 1 , 0 } };
0 commit comments