Find the Fibonacci number using matrix exponentiation:
We start with the matrix F =
[[1,1], [1,0]] and compute the matrix exponentiation Math.pow(F, n) as
public static int[][] identity(int size) {
int[][]
I = new int[size][size];
for (int i = 0; i < size; i++) {
I[i][i] = 1;
}
return I;
}
public static int[][] matrixMultiplication(int[][] A, int[][] B, int
modulo) {
int[][]
C = new int[A.length][A.length];
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < A.length; j++) {
int value = 0;
for (int k = 0; k < A.length; k++) {
value = (value + (A[i][k] % modulo) * (B[k][j] % modulo)) % modulo;
}
C[i][j] = value;
}
}
return C;
}
public static int[][] matrixExponentiation(int[][] A, int row, int
modulo ) {
int [][] B = identity(A.length);
while (row > 0) {
if ((row & 1) == 1) {
B = matrixMultiplication(A, B, modulo);
}
A = matrixMultiplication(A, A, modulo);
row >>= 1;
}
return B;
}
Int [][] result = matrixExponentiation(F, n, 1000007);
Nth Fibonacci number is result[0][0];
N = 4, result = [[5, 3], [3, 2]], N’th Fibonacci number = 5
No comments:
Post a Comment