fork(6) download
  1. def matrix_multiply(A,B,m):
  2. return [ [ ( A[r][0]*B[0][c] + A[r][1]*B[1][c] ) % m for c in range(2) ] for r in range(2) ]
  3.  
  4. def matrix_power(A,n,m):
  5. if n==0: return [ [1%m,0], [0,1%m] ] # identity modulo m
  6. B = matrix_power(A,n//2,m)
  7. C = matrix_multiply(B,B,m)
  8. if n%2==1: C = matrix_multiply(C,A,m)
  9. return C
  10.  
  11. def modular_fibonacci(n,m):
  12. A = matrix_power( [ [0,1], [1,1] ], n, m )
  13. return A[1][0]
  14.  
  15. for n in range(10): print( modular_fibonacci( n, 10**9 ) )
  16. print( modular_fibonacci( 10**100, 10**9 ) )
Success #stdin #stdout 0.11s 10104KB
stdin
Standard input is empty
stdout
0
1
1
2
3
5
8
13
21
34
560546875