def matrix_pow(M, n): res = [[1, 0], [0, 1]] while n > 0: if n & 1: res = matrixmultiply(res, M) M = matrixmultiply(M, M) n = n >> 1 return res
def fibmatrix(n): """ initial matrix - derived from F1 = F1 and F2 = F1 + F0 """ Mat = [[0, 1], [1, 1]] F = [[0], [1]] Fn = matrix_pow(Mat, n) ans = matrixmultiply(Fn, F) return ans[0]