| mike_liz.day@tiscali.co.uk on Fri, 08 Jan 2016 19:25:07 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: fibonacci(n) for large n's |
Whether or not you're working modulo something, consider
the 2x2
matrix M = [0 1] [1 1] , ie with all Mij = 1 except for M11 = 0 .
Let MM
(i) be M to the power 2^i .
If n = sum of 2^ai, then the product of MM
(ai) yields the required
fibonacci number in the (2,1) position.
So:
(17:56) gp > M=matrix(2,2,x,y,1<max(x,y)) \\ set up matrix M
%16 =
[0
1]
[1 1]
(17:57) gp > MM(i)={M^2^i} \\ set up function MM
%17 = (i)
->M^2^i
(17:57) gp > q=apply(MM,[0,1,3]) \\ 11 = 1 + 2 + 8 = sum 2^0
1 3
%18 = [[0, 1; 1, 1], [1, 1; 1, 2], [13, 21; 21, 34]]
(17:57) gp >
prod(x=1,3,q[x]) \\ product of the 3 matrices
%19 =
[55 89]
[89
144]
(18:05) gp > M^11 \\ compare the straightforward (but slower)
way
%22 =
[55 89]
[89 144]
89 is the 11th or 12th Fibonacci number,
depending on where
you set the origin.
10^10 is approximately 2^33,
so you don't need to apply MM too
many times.
But you probably need
to restrict M with a modulus function,
eg M = Mod(M,101) ....
Any
use?
Mike
On 08/01/2016 08:28, Ralf Stephan wrote:
> You're sure you
want the complete number as result, or only modulo something, like in
some Project Euler puzzles?
>
> On Fri, Jan 8, 2016 at 9:03 AM Zak
Seidov <zakseidov@yahoo.com> wrote:
>
>
> Dear pari gurus,
>
what is the fastest way to calculate fibonacci numbers
> other than
just fibonacci(n) for large n's (>~10^10, say).
> Thx,
> Zak