Как написать делители числа n? - Lisp
Формулировка задачи:
Как написать делители числа n?
Решение задачи: «Как написать делители числа n?»
textual
Листинг программы
(defun divisors (n &optional (m (truncate (/ n 2)))) (when (plusp m) (if (zerop (rem n m)) (cons m (divisors n (1- m))) (divisors n (1- m))))) > (divisors 100) (50 25 20 10 5 4 2 1) > (divisors 99) (33 11 9 3 1)
Объяснение кода листинга программы
В коде определённая функция divisors для вычисления всех делителей числа n.
Если число m больше или равно n, то возвращается список делителей n,
Если число m меньше n, то рекурсивно вызывается функция divisors для вычисления делителей числа n с новым значением m равным m-1.
Если число m равно n, то возвращается пустой список.
Для вычисления делителей числа 100 получается список (50,25,20,10,5,4,2,1), для числа 99 - (33,11,9,3,1).