Talk:Fibonacci matrix-exponentiation: Difference between revisions

→‎Ruby: new section
(→‎Ruby: new section)
Line 12:
 
I confess fib(2^64) seems unreachable using matrix exponentiation. Nevertheless it allowed to see some creative solution like the Sidef solution using fibmod.
 
== Ruby ==
 
 
require 'matrix'
start_time = Time.now
[10,100,1_000,10_000, 2 ** 16, 100_000, 1_000_000, 2 ** 32 ].each {|n|
fib_Num=(Matrix[[0,1],[1,1]] ** (n))[0,1]
fib_Str= fib_Num.to_s()
if fib_Str.length <= 21
p [n,fib_Str.length.to_s + ' digits' , fib_Str, "Took #{Time.now - start_time}s"]
else
p [n,fib_Str.length.to_s + ' digits' , fib_Str.slice(0,20) + " ... " + fib_Str[-20 ... -1] , "Took #{Time.now - start_time}s"]
end
}
puts "Took #{Time.now - start_time}s"
 
outputs
[10, "2 digits", "55", "Took 9.0311e-05s"]
[100, "21 digits", "354224848179261915075", "Took 0.000259388s"]
[1000, "209 digits", "43466557686937456435 ... 7613779516684922887", "Took 0.000512211s"]
[10000, "2090 digits", "33644764876431783266 ... 6607331005994736687", "Took 0.001087754s"]
[65536, "13696 digits", "73199214460290552832 ... 9727019095530746322", "Took 0.003636489s"]
[100000, "20899 digits", "25974069347221724166 ... 4989537465342874687", "Took 0.008467388s"]
[1000000, "208988 digits", "19532821287077577316 ... 6899652683824254687", "Took 0.104574053s"]
20

edits