Project Euler: Multiples of 3 and 5 - Lisp

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Project Euler: Multiples of 3 and 5»

textual
Листинг программы
(defun sum-35 (n)
  (let ((s 0))
    (iter (for i from 3 to n by 3) (summing i into s))
    (iter (for i from 5 to n by 5) (when (not (zerop (rem i 3))) (summing i into s)))
    s))
 
==> sum-35
 
(sum-35 999)
 
==> 233168

Объяснение кода листинга программы

В коде представлена функция sum-35, которая принимает один аргумент n. Внутри функции создаётся переменная s со значением 0, которая будет использоваться для подсчёта суммы. С помощью цикла iter с шагом 3 перебираются все числа от 3 до n с шагом 3. Для каждого числа i в цикле проверяется, делится ли оно на 3 без остатка. Если да, то число i добавляется к переменной s. Затем с помощью цикла iter с шагом 5 перебираются все числа от 5 до n с шагом 5. Для каждого числа i в цикле проверяется, делится ли оно на 3 без остатка. Если нет, то число i добавляется к переменной s. В конце функции возвращается значение переменной s. Значение функции sum-35 при аргументе 999 равно 233168.

Оцени полезность:

11   голосов , оценка 3.727 из 5
Похожие ответы