Написать предикат, определяющий, являются ли его аргументы взаимно простыми числами - Prolog
Формулировка задачи:
Помогите пожалуйста! Надо написать предикат, определяющий, являются ли его аргументы взаимно простыми числами. Взаимно простыми называются числа, наибольший общий делитель которых равен единице.
Решение задачи: «Написать предикат, определяющий, являются ли его аргументы взаимно простыми числами - Prolog»
textual
Листинг программы
predicates gcd(integer,integer,integer) v_prime(integer,integer) clauses gcd(M,N,R):- M < N, gcd(N,M,R),!. gcd(M,N,N):- M mod N = 0, !. gcd(M,N,R):- MM=M mod N, gcd(N,MM,R). v_prime(X,Y) :- gcd(X,Y,Z), Z=1.
Объяснение кода листинга программы
- Задача кода - определить, являются ли два числа взаимно простыми.
- Предикат
gcd(integer,integer,integer)принимает три аргумента типаinteger(целые числа) и возвращает результат вычисления их наибольшего общего делителя (НОД). - Предикат
v_prime(integer,integer)принимает два аргумента типаintegerи возвращает истину, если они взаимно простые, иначе - ложь. - В первой клаузе предиката
gcdиспользуется стратегия обратного трассирования (backtracking). Если первое число меньше второго, то перебираются все возможные значения третьего аргумента. Если второе число меньше первого, то аргументы меняются местами и перебираются все возможные значения третьего аргумента. Если третье число равно нулю, то это означает, что числа взаимно простые, и мы заканчиваем поиск. - Во второй клаузе предиката
gcdиспользуется стратегия прямого трассирования (forward chaining). Если остаток от деления первого числа на второе равен нулю, то это означает, что числа взаимно простые, и мы заканчиваем поиск. - В третьей клаузе предиката
gcdиспользуется стратегия разбиения и поиска (divide and conquer). Если остаток от деления первого числа на второе равен нулю, то это означает, что числа взаимно простые, и мы заканчиваем поиск. - Предикат
v_prime(X,Y)использует предикатgcdдля вычисления НОД двух чисел и проверки, равен ли он единице. Если это так, то числа взаимно простые, и мы возвращаем истину.