18 lines
348 B
Plaintext
18 lines
348 B
Plaintext
procedure main(args)
|
|
write(fib(integer(!args) | 1000000))
|
|
end
|
|
|
|
procedure fib(n)
|
|
return fibMat(n)[1]
|
|
end
|
|
|
|
procedure fibMat(n)
|
|
if n <= 0 then return [0,0]
|
|
if n = 1 then return [1,0]
|
|
fp := fibMat(n/2)
|
|
c := fp[1]*fp[1] + fp[2]*fp[2]
|
|
d := fp[1]*(fp[1]+2*fp[2])
|
|
if n%2 = 1 then return [c+d, d]
|
|
else return [d, c]
|
|
end
|