К основному контенту

Задача 2 Четные числа Фибоначчи


Задача 2  Четные числа Фибоначчи

Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 10 элементов будут:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Найдите сумму всех четных элементов ряда Фибоначчи, которые не превышают четыре миллиона.

Решение на Python

Пока не особо владею приемами функционального программирования на Python, но кое-какие шаблонные фитчи использую. Прошу строго не судить о коде:

f=[1,2]
i=2
a=0
while f[i]<4000000:
    f.append(f[i-1]+f[i-2])
    i+=1
    a=f[i]
res=filter(lambda x:x%2==0, f)
print(sum(res))

Цикл создающий числа Фибоначчи на основе перебора элементов списка я позаимствовал из Википедии, немного видоизменив под задачу - вместо порога по количеству чисел я установил порог по значению в 4000000. Но данный цикл имеет недостаток- он создает одно число, которое больше установленного порога - 5702887, но оно является не четным и на результат не влияет.
 Переменная i хранит индекс от 2-х, a - текущее значение числа числа.

filter(lambda x:x%2==0, f) - является функцией, возвращающей четные списка f, точнее возвращает функцию, которую передаем функции sum - она и возвращает результат суммы списка. 
Результат работы  = 4613732

В общем код получился не очень красивым но он выдает правильный результат и работает очень быстро - менее 0.0001 с. В будущем, освоив функциональное программирование я перепишу код, согласно требований  -не использовать переменные и не превышать заданного порога. 

Популярные сообщения из этого блога

Задача №1 Сумма чисел, кратных 3 м и 5-ти

 . Задача №1 Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел - 23. Найдите сумму всех чисел меньше 1000, кратных 3 или 5. Решение

Задача 21. Дружественные числа

Пусть d( n ) определяется как сумма делителей  n  (числа меньше  n , делящие  n  нацело). Если d( a ) =  b  и d( b ) =  a , где  a  ≠  b , то  a  и  b  называются дружественной парой, а каждое из чисел  a  и  b  - дружественным числом. Например, делителями числа 220 являются 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 и 110, поэтому d(220) = 284. Делители 284 - 1, 2, 4, 71, 142, поэтому d(284) = 220. Подсчитайте сумму всех дружественных чисел меньше 10000. Решение Для начала определим функцию, которая будет возвращать сумму делителей числа: def get_sum(n):     s=0     for i in range(1,n):         if n%i==0:             s+=i     return s Думаю не требует объяснений все довольно тривиально Далее определяем функцию, возвращающую список дружественных чисел до числа n:   def gen_friendlys(n):   ...

БЛОГ ПЕРЕЕХАЛ

БЛОГ "Проект Эйлера на Python" наконец-то получил второй шанс на жизнь и переехал на новый адрес  https://pythonvsjs.valis.me/ В новом формате я не просто буду решать задачи проекта Эйлера на python но и сравнивать производительность Python, JavaScript, Lua, Dart, Scala,  Haskel и прочих языков программирования в решении задач Следите плиз за моим новым блогом Также подписывайтесь на мой Youtube канал  https://www.youtube.com/channel/UCLdyT4P8AA-8YpsAFfeLZZQ Там много интересных видео связанных с IT:  Как написать telegram бота за 15 минут, сделать управляемый по wifi чайник,  стоит ли учить Dart и многое другое. Все это на моем канале И для текстового сопровождения видео я сделал специальный блог blog.valis.me - где вы сможете полистать сопровождающий видео текстовый материал И чтобы не пропустить все это подписывайтесь на мой Twitter  @Denis22019055 Все спасибо! Пока!