Processing math: 100%

58969 afișări Candale Silviu (silviu) 10.07.2023
www.pbinfo.ro

Introducere

Șirul lui Fibonacci este definit astfel:

Fn={1dacă n=1 sau n=2,Fn1+Fn2dacă n>2.

Pentru a determina al n-termen a șirului putem folosi diverse metode. Acest articol prezintă un algoritm de complexitate O(n) care determină al n-lea termen.

Prezentul articol prezintă un algoritm de complexitate logaritmică, bazat pe înmulțirea rapidă a matricelor.

Matrice Fibonacci

Considerăm următoarea matrice: Q=(1110). Dacă extindem șirul lui Fibonacii cu încă un element, F0=0, observăm că: Q=(F2F1F1F0). Să calculăm Q2 și Q3:

Q2=Q×Q=(F2F1F1F0)×(1110)=(F21+F11F21+F10F11+F01F11+F00)=(F2+F1F2F1+F0F1)=(F3F2F2F1)

Similar:

Q3=Q2×Q=(F3F2F2F1)×(1110)=(F31+F21F31+F20F21+F11F21+F10)=(F3+F2F3F2+F1F2)=(F4F3F3F2)

Observăm că Qn=(Fn+1FnFnFn1), lucru ușor de demonstrat prin inducție matematică.

Concluzie: Dacă Q=(1110), atunci Qn=(Fn+1FnFnFn1).

Algoritm

Pentru a determina Fn, considerăm matricea Q=(1110), pe care o ridicăm la puterea n. Pentru a efectua repede calculele, folosim exponențierea rapidă.

Problema #Fibonacci2 cere determinarea celui de-al n-lea termen al șirului lui Fibonacii, modulo 666013. Succes!

Bibliografie


58969 afișări Candale Silviu (silviu) 10.07.2023
www.pbinfo.ro
Du-te sus!