Опишите предикат, определяющий список простых делителей данного числа - 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).

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

  1. divList(N, L) :- divList(N, 2, L). - Главная цель - найти список простых делителей числа N. Рекурсивная функция divList принимает три аргумента: N (число, для которого ищут простые делители), L (список, который будет содержать простые делители) и I (текущий делитель). Если I равно 2, то это базовый случай, и мы просто добавляем 2 в список L и завершаем рекурсию.
  2. divList(N, I, [N]) :- I2 is I*I, I2 > N, !. - Если текущий делитель I больше самого числа N, то это означает, что I не является делителем N, и мы переходим к следующему делителю. Здесь мы также используем cut (!), чтобы предотвратить рекурсивный вызов функции, если текущий делитель не является делителем N.
  3. 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).
  4. divList(N, I, L) :- II is I+1, divList(N, II, L). - Если текущий делитель I не является делителем N, то мы увеличиваем его на 1 и рекурсивно вызываем функцию divList с новым значением II. Это продолжается до тех пор, пока мы не найдем все простые делители числа N.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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