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.