» » »

Опишите предикат, определяющий наибольший общий простой делитель двух целых чисел.

% Bilet11
% Patched by JamshyT 14.01.13
% Special for AISTd-31 :)
% To start type: jstart.
delit(X,Y):-0 is Y mod X.

between(X,Y,Z):-Y=<Z, X=Y.
between(X,Y,Z):-Y<Z,Y1 is Y+1, between(X,Y1,Z).

delitel(X,Y):-between(X,1,Y), delit(X,Y).

prostoe(X):-not (delitel(D,X),D\=X,D\=1).

max(X,Y,X):-
  X>Y.
max(X,Y,Y):-
  X<Y.
max(X,Y,Y):-
  X=Y.

max_list([X],X).
max_list([H|T],M):-
  max_list(T,M_T), 
  max(H,M_T,M).

delitels(X,Y,T):-delitel(T,Y),delitel(T,X).

nopd(X,Y,T):-setof(H,(delitels(X,Y,H),prostoe(H)),L),max_list(L,T).
jstart:- write(' 1e chislo: '),nl,read(JAM1),nl,
write(' 2e chislo: '),nl,read(JAM2),nl,
nopd(JAM1,JAM2,Z),
write(Z).

Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.

Поделиться

Оплаченная реклама

Дисциплины