Решил я заняться выполнением задач проекта эйлера. И на второй задаче я встал в ступор,
так как сразу откинул решение с перечислением всех чисел фибоначчи.
1, 1,
2, 3, 5,
8, 13, 21,
34, 55, 89,
144
Смотря на последовательность, я понял что каждое четное число можно вычислить.
Четное число фибоначчи равно сумме предыдущего четного числа последовательности умноженного на 4
и запредыдущего четного числа:
34 = 8 * 4 + 2
144 = 34 * 4 + 8
Исходя из этого я значительно ускорил скорость работы скрипта, так как мне перестало быть нужным перечислять
нечётные числа. Сам скрипт:
# n и b - это первые четные 2 числа фибоначчи
n = 2
b = 8
sum_of_numbers = 0
while True:
# Здесь я задаю меньшей переменной значение следующего числа
if n < b:
n = 4 * max(n, b) + min(n, b)
else:
b = 4 * max(n, b) + min(n, b)
sum_of_numbers += max(n, b)
if max(n, b) >= 4000000:
break
# Прибавляю 10, так как изначально опустил первые 2 четных значения, и минусую последнее четное число,
# так как оно больше 4000000
print((sum_of_numbers + 10) - max(n, b))