% Conjectura lui Goldbach.
% Conjectura lui Goldbach afirma ca fiecare numar par mai mare ca 2 poate fi scris
% ca suma de 2 nr prime. Exemplu: 28 = 5 + 23 .
% Ea nu a fost demonstrata, dar a fost verificata pana la numere foarte mari.
prim(2) .
prim(3).
prim(P) :- integer(P) , P > 3 , P mod 2 =\= 0, \+ divide(P,3) .
divide(N,L) :- N mod L =:= 0.
divide(N,L) :- L * L < N, L2 is L + 2, divide(N,L2).
% goldbach(N,L) :- L este lista de 2 nr prime care insumate, dau N.
goldbach(4,[2,2]) :- !.
goldbach(N,L) :- N mod 2 =:= 0, N > 4, goldbach(N,L,3).
goldbach(N,[P,Q],P) :- Q is N – P, prim(Q), !.
goldbach(N,L,P) :- P < N, next_prim(P,P1), goldbach(N,L,P1).
next_prim(P,P1) :- P1 is P + 2, prim(P1), !.
next_prim(P,P1) :- P2 is P + 2, next_prim(P2,P1).
Interogări:
| ?- goldbach(700,L) .
L = [17,683] ?
| ?- goldbach(4,L) .
L = [2,2] ?
| ?- goldbach(44,L) .
L = [3,41] ?
| ?- goldbach(15,L) .
no
| ?- goldbach(36,L) .
L = [5,31] ?