0256 - Verificare termen sir Fibonacci

De la Universitas MediaWiki

Cerință

Se dau n numere naturale. Să se verifice despre fiecare dacă este termen al şirului lui Fibonacci.

  • Se consideră şirul Fibonacci, definit astfel: f1=0 , f2=1 , fn=fn-1+fn-2 , dacă n>2.

Date de intrare

Programul citește de la tastatură numerele pe care dorim sa le verificam daca apartin sirului Fibonacci.

Date de ieșire

Programul afișează pe ecran DA / NU in functie de apartenenta numarului in sirul Fibonacci.

Restricții și precizări

1 ≤ n ≤ 10 numerele care se verifică au cel mult 9 cifre

Exemplu

Date de intrare: 8 13 1 8 24 21 55 47 8
Date de ieșire: DA DA DA NU DA DA NU DA

Rezolvare

def apartine_sir_fibo(numar):
    if numar == 1:
        return 1
    f1 = 0
    f2 = 1
    f3 = f1 + f2
    while numar > f3:
        f3 = f1 + f2
        f1 = f2
        f2 = f3
    return numar == f3

def numere(array):
    for elements in array:
        if apartine_sir_fibo(elements):
            print("DA")
        else:
            print("NU")


if __name__ == "__main__":
    numar = int(input())
    array = [int(input()) for i in range(numar)]
    numere(array)