Проект Эйлера - Задача 2


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

Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 11 элементов будут:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Найдите сумму всех четных элементов ряда Фибоначчи, которые не превышают четыре миллиона.

Моё решение (Python) под катом:

В начале было интересно просто повторить ряд Фибоначчи из примера:

a = 1 b = 0 c = 0 i = 0 while i <= 10: c = a + b print(c) i += 1 a = b b = c
  1. Задаём переменные a, b, c и i с которыми и будем работать.
  2. Запускаем луп 10 раз и получаем ряд Фибоначчи из примера.
Круто!! Работает. Теперь можно переходить к решению задачи.
Значит надо добавить условие по которому мы будем выбирать только чётные элементы и складывать их. Главное чтобы сам элемент не превышал 4М.

a = 1 b = 0 c = 0 sum = 0 while c <= 4000000: c = a + b if c % 2 == 0: sum += c a = b b = c print(sum)

  1. Переменную i меняем на sum. В ней и будем всё суммировать.
  2. А в переменной с мы будем хранить последний элемент ряда. Таким образом мы будет отслеживать только сами элементы ряда а не все числа до 4М.
Питон выдал ответ 4613732.

Я так решил.

11 комментариев:

  1. nums = [1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
    high = nums[-1]
    while high < 4000000:
    preHigh = nums[-2]
    high += preHigh
    nums.append(high)
    print(nums)

    ОтветитьУдалить
  2. Можно было сделать b += a
    a = b - a
    Тогда не нужно вводить переменную c

    ОтветитьУдалить
  3. a = 1
    b = 2
    c = 3
    d = 0
    while a < 4000000 and b < 4000000 and c < 4000000:
    a = c + b
    b = a + c
    c = a + b
    if a%2==0:
    d = d + a
    if b%2==0:
    d = d + b
    if c%2==0:
    d = d +c
    print(d)

    ОтветитьУдалить
  4. x1 = 0
    x2 = 1
    sum = 0
    while x2 < 4000000:
    x1, x2 = x2, x1 + x2
    if x2 % 2 == 0:
    sum += x2
    print("Ответ: ", sum)

    ОтветитьУдалить
  5. arr = [1, 2]

    for i in arr:
    if (i + arr[-1]) > 4000000:
    break
    else:
    arr.append(i + arr[-1])

    print(sum([i for i in arr if i %2 == 0]))

    ОтветитьУдалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. result = 0
    fib_1, fib_2 = 1, 1

    while fib_2 <= 4000000:
    fib_2 += fib_1
    fib_1 = fib_2 - fib_1
    if fib_2 % 2 == 0:
    result += fib_2

    print(result)

    ОтветитьУдалить
  8. # Мой Ответ
    sumf = 0
    f1 = 1
    f2 = 1
    for n in range(1,4000000):
    if n == f1 + f2 or f2 == 1:
    f1 = f2
    f2 = n
    if f2 % 2 == 0:
    sumf += n
    print(sumf)

    ОтветитьУдалить
  9. # Мой Ответ
    a = 1
    b = 2
    c = 3
    v = []
    v.append(a)
    v.append(b)
    while a<4000000 or b < 4000000 or c < 4000000:
    c = a+b
    v.append(c)
    a = c+b
    v.append(a)
    b = a+c
    v.append(b)
    z = []
    for i in v:
    if i%2 ==0:
    z.append(i)
    print(sum(z))

    ОтветитьУдалить
  10. x=[1, 2]
    while x [-1] < 4000000:
    x.append (x [-1] + x [-2])
    summ = 0
    for i in x:
    if i % 2 == 0 and i < 4000000:
    summ += i
    print (summ)

    ОтветитьУдалить