Кратное 3 и 5:

Задача просит найти сумму всех кратных 3 и 5 меньше 1000.

Самый первый подход, который пришел мне в голову, заключался в том, чтобы перебрать числа от 1 до 1000 и суммировать те, которые делятся на 3 или 5.
Это можно наивно написать на Python следующим образом:

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

sum (iterable, start): возвращает сумму start (по умолчанию 0) и элементов итераций.

Отлично. Всего лишь строчка кода!
Однако это требует линейной сложности, если предположить, что N (здесь = 1000) не является постоянным.
Это не очень хорошо, если у нас очень большие значения N и жесткие временные ограничения .

Мы можем решить эту проблему со сложностью O (1)!

  • Сумма кратных (3 или 5) = Сумма кратных (3) + Сумма кратных (5) -Сумма кратных (15)
  • Сумма кратных (n, r) = n * (r * (r + 1)) / 2 (с использованием арифметической прогрессии),
    где n - число, кратное которому мы хотим, а r - количество кратные, которые нам необходимо учитывать.
    Например:
    Кратные 5 ниже 1000 составляют 5,10,15,20,… .,995 (n = 5, r = 199).
Answer: 233168


Не стесняйтесь комментировать сомнения или предложения.