Listas

15. Ejercicios Resueltos

15.13. Fibonacci 3 de 3

"""
Algoritmo que obtiene los 10 primeros elementos de la serie de fibonacci que son primos.
Para la resolución del problema se utiliza la condición de que si existe una división exacta (resto = 0) por un número distinto de uno o si mismo el número no es primo.
Si no hay división exacta y el cociente es menor que el divisor el número es primo y se deja de buscar.
"""
#---------------------------------------------------------------------------------------------------
a, b = 1, 1                         #Inicio en 1 'a' y 'b' porque el primer elemento primo de la serie es 2
contador = 0
primos = []
while True:
    c = a + b
    for i in range(2, c+1):   #El range() inicia en 2 porque es el primer divisor distinto de 1.
        contador += 1         #Contador de iteraciones necesarias para obtener los número primos
        if i == c:                   #Condición para que el 2 sea incluido en la lista.
            primos.append(c)
            break
        elif c % i == 0:         #Si existe una división exacta que no sea por si mismo no es primo.
            break
        elif c // i < i:             #Si el cociente es menor que el divisor y no hubo división exacta es primo.
            primos.append(c)  
            break                   #Este "break" termina la ejecución del "for" porque el número es primo.  
    if len(primos) >= 10:     
       break                       #Este "break" termina la ejecución del bucle "while".   
    a, b = b, c                   #Se realiza el intercambio de a=b y b=c.
print('Los primeros 10 números primos de la serie de fibonacci son: ')
print(primos)
print('Se necesitaron {} iteraciones para obtenerlos'.format(contador))
#--------------------------------------------------------------------------------------------------

Los primeros 10 números primos de la serie de fibonacci son:

[2, 3, 5, 13, 89, 233, 1597, 28657, 514229, 433494437]

Se necesitaron 27229 iteraciones para obtenerlos