Вычисление суммы четных делителей натурального числа на 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).
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Код решает задачу вычисления суммы четных делителей натурального числа N.
- Для решения задачи используется рекурсивный алгоритм.
- В первой линии правил sum_evendiv(N,,0) :- (N mod 2) <> 0, !. проверяется, является ли N нечетным числом. Если это так, то рекурсия прекращается и значение R остается равным 0.
- Во второй линии правил sum_even_div(N,K,0) :- K > (N div 2), !. проверяется, является ли K больше половины значения N. Если это так, то рекурсия прекращается и значение R остается равным 0.
- В третьей и четвертой линиях правил 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.
- В последней строке task(N,R) :- sum_even_div(N,2,R). задается начальное значение N и R для функции sum_even_div, которая начинает вычислять сумму четных делителей N.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д