Какое простое число является самым большим множителем числа 600851475143? - Lisp
Формулировка задачи:
Какое простое число является самым большим множителем числа 600851475143?
Написать программы на Common Lisp и F#
Помогите пожалуйста
Решение задачи: «Какое простое число является самым большим множителем числа 600851475143?»
textual
Листинг программы
(defun max-prime-divisor (n) (do ((a 2 (1+ a))) ((> (* a a) n) n) (if (zerop (mod n a)) (return (max-prime-divisor (/ n a)))))) ? (max-prime-divisor 600851475143) 6857
Объяснение кода листинга программы
В данном коде определен функцией max-prime-divisor, которая находит максимальное простое число, являющееся делителем числа n.
В функции используется цикл do, который начинается с переменной a равной 2 и увеличивается на 1 с каждой итерацией, пока не найдено простое число, большее n.
В каждой итерации цикла проверяется, является ли a делителем n. Если да, то функция рекурсивно вызывается для a и результат сохраняется в переменной n. Если нет, то цикл продолжается.
Если делитель не найден, то функция возвращает 0, что означает, что самое большое простое число является делителем n.
В конце кода вызывается функция max-prime-divisor с аргументом 600851475143, и результат выводится на экран.