2017-02-17 15 views
-1

Гипотеза Гольдбаха: каждое положительное четное число, большее 2, является суммой двух простых чисел. Например, 28 (5,23 и 11,17)Гипотеза Гольдбаха в прологе

Я хочу Prolog код для печати ниже (все комбинации):

?- goldbach(28, L). 

Output : 

L = [5,23]; 
L = [11, 17]; 

У меня есть код, который печатает единую комбинацию [5,23], но не следующий [11,17].

is_prime(2). 
is_prime(3). 
is_prime(P) :- integer(P), P > 3, P mod 2 =\= 0, \+ has_factor(P,3). 

has_factor(N,L) :- N mod L =:= 0. 
has_factor(N,L) :- L * L < N, L2 is L + 2, has_factor(N,L2). 

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, is_prime(Q), !. 
goldbach(N,L,P) :- P < N, next_prime(P,P1), goldbach(N,L,P1). 

next_prime(P,P1) :- P1 is P + 2, is_prime(P1), !. 
next_prime(P,P1) :- P2 is P + 2, next_prime(P2,P1). 
+3

Пожалуйста, не изменяйте свой вопрос, чтобы ответы стали недействительными! – false

ответ

0

Опустите разрезы (и добавьте условие, чтобы избежать дублирования ответов).

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, 
    is_prime(Q), P < Q. 
goldbach(N,L,P) :- 
    P < N, 
    next_prime(P,P1), 
    goldbach(N,L,P1). 

 Смежные вопросы

  • Нет связанных вопросов^_^