Опишите предикат, определяющий список простых делителей данного числа - Prolog
Формулировка задачи:
2.Опишите предикат, определяющий список простых делителей данного числ
с учетом и без учета кратности
Использовать GNU Prolog
Решение задачи: «Опишите предикат, определяющий список простых делителей данного числа»
textual
Листинг программы
divList(N, L) :- divList(N, 2, L). divList(N, I, [N]) :- I2 is I*I, I2 > N, !. divList(N, I, [I|T]) :- N mod I =:= 0, !, NN is N//I, divList(NN, I, T). divList(N, I, L) :- II is I+1, divList(N, II, L).
Объяснение кода листинга программы
divList(N, L) :- divList(N, 2, L).
- Главная цель - найти список простых делителей числа N. Рекурсивная функцияdivList
принимает три аргумента: N (число, для которого ищут простые делители), L (список, который будет содержать простые делители) и I (текущий делитель). Если I равно 2, то это базовый случай, и мы просто добавляем 2 в список L и завершаем рекурсию.divList(N, I, [N]) :- I2 is I*I, I2 > N, !.
- Если текущий делитель I больше самого числа N, то это означает, что I не является делителем N, и мы переходим к следующему делителю. Здесь мы также используемcut
(!), чтобы предотвратить рекурсивный вызов функции, если текущий делитель не является делителем N.divList(N, I, [I|T]) :- N mod I =:= 0, !, NN is N//I, divList(NN, I, T).
- Если N делится на I без остатка (т.е. N mod I равно 0), то мы нашли делитель, и мы добавляем его в список L и рекурсивно вызываем функциюdivList
для нового значения NN (N, деленное на I).divList(N, I, L) :- II is I+1, divList(N, II, L).
- Если текущий делитель I не является делителем N, то мы увеличиваем его на 1 и рекурсивно вызываем функциюdivList
с новым значением II. Это продолжается до тех пор, пока мы не найдем все простые делители числа N.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д