fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Matrix
  9. {
  10. public int[][]muilmatrix(int[][]m1,int[][]m2){
  11. int res[][]=new int[m1.length][m2[0].length];
  12. for(int i=0;i<m2[0].length;i++){
  13. for(int j=0;j<m1.length;j++){
  14. for(int k=0;k<m2.length ;k++){
  15. res[i][j]+=(m1[i][k]*m2[k][j]);
  16.  
  17. }
  18. }
  19. }
  20.  
  21. System.out.println("m1-------------");
  22. for (int i = 0; i < m1.length; i++)
  23. {
  24. for (int j = 0; j < m1[i].length; j++)
  25. {
  26. System.out.print(m1[i][j] + " ");
  27. }
  28. System.out.println();
  29. }
  30.  
  31. System.out.println("m2-------------");
  32. for (int i = 0; i < m2.length; i++)
  33. {
  34. for (int j = 0; j < m2[i].length; j++)
  35. {
  36. System.out.print(m2[i][j] + " ");
  37. }
  38. System.out.println();
  39. }
  40.  
  41. System.out.println("---------------");
  42. for (int i = 0; i < res.length; i++)
  43. {
  44. for (int j = 0; j < res[i].length; j++)
  45. {
  46. System.out.print(res[i][j] + " ");
  47. }
  48. System.out.println();
  49. }
  50.  
  51. return res;
  52. }
  53. //计算p次方
  54. public int[][] matrixPower(int [][]m1,int p){
  55. int res[][]=new int[m1.length][m1[0].length];
  56. for(int i=0;i<m1.length;i++){
  57. res[i][i]=1;
  58. }
  59. int [][]temp=m1;
  60. for(;p!=0;p>>=1){
  61. if((p&1)!=0){
  62. res=muilmatrix(res,temp);
  63. }
  64. temp=muilmatrix(temp,temp);
  65. }
  66.  
  67. return res;
  68. }
  69. public int Fibonacci(int n){
  70. if(n<1)
  71. return 0;
  72. if(n==1||n==2)
  73. return 1;
  74. int base[][]={{1,1},{1,0}};
  75. int res[][]=matrixPower(base,n-2);
  76. return res[0][0]+res[1][0]; //这里为什么是这样,
  77. }
  78. public static void main(String args[]){
  79. Matrix matrix=new Matrix();
  80. int a[][]={{1,1},{1,0}};
  81. int b[][]= matrix.matrixPower(a, 2);
  82. int c=9;
  83. System.out.println(matrix.Fibonacci(c));
  84. //输出
  85.  
  86. }
  87. }
Success #stdin #stdout 0.09s 27736KB
stdin
Standard input is empty
stdout
m1-------------
1  1  
1  0  
m2-------------
1  1  
1  0  
---------------
2  1  
1  1  
m1-------------
1  0  
0  1  
m2-------------
2  1  
1  1  
---------------
2  1  
1  1  
m1-------------
2  1  
1  1  
m2-------------
2  1  
1  1  
---------------
5  3  
3  2  
m1-------------
1  0  
0  1  
m2-------------
1  1  
1  0  
---------------
1  1  
1  0  
m1-------------
1  1  
1  0  
m2-------------
1  1  
1  0  
---------------
2  1  
1  1  
m1-------------
1  1  
1  0  
m2-------------
2  1  
1  1  
---------------
3  2  
2  1  
m1-------------
2  1  
1  1  
m2-------------
2  1  
1  1  
---------------
5  3  
3  2  
m1-------------
3  2  
2  1  
m2-------------
5  3  
3  2  
---------------
21  13  
13  8  
m1-------------
5  3  
3  2  
m2-------------
5  3  
3  2  
---------------
34  21  
21  13  
34