from collections.abc import Callable
from numpy import matrix, long
def fib() -> Callable:
m = matrix('1, 1; 1, 0', dtype=long)
def fib(n: int) -> long:
return (m ** n)[0, 0]
return fib
fib = fib()
Cython
from libc.stdint cimport int64_t
from numpy cimport ndarray
from numpy import matrix, long
cdef:
ndarray m = matrix('1, 1; 1, 0', dtype=long)
cpdef int64_t fib(int n):
return (m ** n)[0, 0]
[]’s
[update 2015-11-28]
Código atualizado para Python 3 e versão Cython.
[/update]