# [a b] [e f] # [c d] [g h] def matrix_mul(A,B): [a,b,c,d] = A [e,f,g,h] = B return [a*e+b*g, a*f+b*h, c*e+d*g, c*f+d*h] # [a b] [a b] # [c d] [c d] def matrix_square(A): [a,b,c,d] = A temp = b*c return [a*a+temp, a*b+b*d, a*c+c*d, temp+d*d] def fast_matrix_pow(A,n): if n==0: return [1,0,0,1] if n==1: return A temp = fast_matrix_pow(A,n>>1) temp = matrix_square(temp) if n%2 == 1: return matrix_mul(temp,A) else: return temp def fast_fib(n):
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous
Anonymous