Conjenctura lui Goldbach

prolog_logo
Cod Sursa PROLOG

 

% 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] ?

Leave a comment