Вычисление суммы четных делителей натурального числа на Turbo Prolog

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

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

Добрый день. Есть задача: Составьте программу вычисления суммы четных делителей натурального числа М. Написал такой код:
Подскажите, пожалуйста, где здесь ошибка? Если ввожу 4 или 8, то количество делителей считает Если ввожу 6,10 или 12 - выдает что нет решений Спасибо.

Решение задачи: «Вычисление суммы четных делителей натурального числа на Turbo Prolog»

textual
Листинг программы
domains
int=integer
 
predicates
sum_even_div(int,int,int)
task(int,int)
 
clauses
sum_even_div(N,_,0) :- (N mod 2) <> 0, !.
sum_even_div(N,K,0) :- K > (N div 2), !.
sum_even_div(N,K,R) :- (N mod K)=0, K1=K+2, sum_even_div(N,K1,R1), R=R1+K.
sum_even_div(N,K,R) :- (N mod K)<>0, K1=K+2, sum_even_div(N,K1,R).
 
task(N,R) :- sum_even_div(N,2,R).

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

  1. В коде используется язык программирования Prolog.
  2. Код решает задачу вычисления суммы четных делителей натурального числа N.
  3. Для решения задачи используется рекурсивный алгоритм.
  4. В первой линии правил sum_evendiv(N,,0) :- (N mod 2) <> 0, !. проверяется, является ли N нечетным числом. Если это так, то рекурсия прекращается и значение R остается равным 0.
  5. Во второй линии правил sum_even_div(N,K,0) :- K > (N div 2), !. проверяется, является ли K больше половины значения N. Если это так, то рекурсия прекращается и значение R остается равным 0.
  6. В третьей и четвертой линиях правил sum_even_div(N,K,R) :- (N mod K)=0, K1=K+2, sum_even_div(N,K1,R1), R=R1+K. и sum_even_div(N,K,R) :- (N mod K)<>0, K1=K+2, sum_even_div(N,K1,R1), R=R1+K. проверяется, делится ли N на K без остатка. Если это так, то рекурсия продолжается, увеличивая K на 2, и значение R1 становится равным сумме четных делителей N. Значение R при этом увеличивается на K.
  7. В последней строке task(N,R) :- sum_even_div(N,2,R). задается начальное значение N и R для функции sum_even_div, которая начинает вычислять сумму четных делителей N.

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


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

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

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