1 | initial version |

The following works without any Cython (but I do not know what you mean with the "Knuth matrices")

```
sage: m = matrix(2, [1,1,1,0])
sage: all((m**i)[0,0] == fibonacci(i+1) for i in range(10))
True
sage: A = m **1000000000 # needs some seconds
sage: A[0,0].ndigits()
208987641
```

In the background the above code uses link text which performs very well with integers.

2 | No.2 Revision |

The following works without any Cython in 26s (but I do not know what you mean with the "Knuth matrices")

```
sage: m = matrix(2, [1,1,1,0])
sage: all((m**i)[0,0] == fibonacci(i+1) for i in range(10))
True
sage: %time A = m
```~~**1000000000 # needs some seconds
~~**999999999
CPU times: user 25.5 s, sys: 688 ms, total: 26.2 s
Wall time: 26.2 s
sage: A[0,0].ndigits()
~~208987641
~~208987640

In the background the above code uses ~~link text~~flint which performs very well with integers.

3 | No.3 Revision |

The following works without any Cython in 26s (but I do not know what you mean with the "Knuth matrices")

```
sage: m = matrix(2, [1,1,1,0])
sage: all((m**i)[0,0] == fibonacci(i+1) for i in range(10))
True
sage: %time A = m **999999999
CPU times: user 25.5 s, sys: 688 ms, total: 26.2 s
Wall time: 26.2 s
sage: A[0,0].ndigits()
208987640
```

You can also check that the second columns are previous Fibonacci numbers:

```
sage: A[1,0] + A[1,1] == A[0,0]
True
```

In the background the ~~above code ~~integer matrices in Sage uses flint which performs very ~~well with integers.~~well.

4 | No.4 Revision |

The following works without any Cython in 26s (but I do not know what you mean with the "Knuth matrices")

```
sage: m = matrix(2, [1,1,1,0])
sage: all((m**i)[0,0] == fibonacci(i+1) for i in range(10))
True
sage: %time A = m **999999999
CPU times: user 25.5 s, sys: 688 ms, total: 26.2 s
Wall time: 26.2 s
sage: A[0,0].ndigits()
208987640
```

You can also check that the second columns are previous Fibonacci numbers:

```
sage: A[0,1] == A[1,0]
True
sage: A[1,0] + A[1,1] == A[0,0]
True
```

In the background the integer matrices in Sage uses flint which performs very well.

5 | No.5 Revision |

```
sage: m = matrix(2, [1,1,1,0])
sage: all((m**i)[0,0] == fibonacci(i+1) for i in range(10))
True
sage: %time A = m **999999999
CPU times: user 25.5 s, sys: 688 ms, total: 26.2 s
Wall time: 26.2 s
sage: A[0,0].ndigits()
208987640
```

You can also check that the second columns are previous Fibonacci numbers:

```
sage: A[0,1] == A[1,0]
True
sage: A[1,0] + A[1,1] == A[0,0]
True
```

In the background the integer matrices in Sage uses flint which performs very well.

**EDIT**: if you only want the number of digits there is of course much faster

```
sage: s = RIF(5).sqrt()
sage: a = log(1/s) + 1000000000 * log((1+s)/2)
sage: b = a / RIF(10).log()
sage: b.unique_ceil()
208987640
```

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.