Опишите предикат, определяющий список простых делителей данного числа - Prolog

Узнай цену своей работы

Формулировка задачи:

2.Опишите предикат, определяющий список простых делителей данного числ с учетом и без учета кратности Использовать GNU Prolog

Решение задачи: «Опишите предикат, определяющий список простых делителей данного числа»

textual
Листинг программы
  1. divList(N, L) :-
  2.     divList(N, 2, L).
  3.  
  4. divList(N, I, [N]) :-
  5.     I2 is I*I,
  6.     I2 > N,
  7.     !.
  8. divList(N, I, [I|T]) :-
  9.     N mod I =:= 0,
  10.     !,
  11.     NN is N//I,
  12.     divList(NN, I, T).
  13. divList(N, I, L) :-
  14.     II is I+1,
  15.     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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы