原视频
def matmul(m1,m2):
res = [[0] * len(m2[0]) for _ in range(len(m1))]
for y in range(len(m1)):
for x in range(len(m2[0])):
n = 0
for a, b in zip(m1[y], (line[x] for line in m2)):
n += a * b
res[y][x] = n
return res
def fab(n):
if n < 0:
return 0
m = [
[0,1],
[1,1],
]
resM = [[1,0],[0,1]]
while n != 0:
if n & 1 == 1:
resM = matmul(m ,resM)
m = matmul(m, m)
n >>= 1
c, d = resM[1]
return d