not_prime(N):-N<2,!.
not_prime(N):-
between(2,N,D),
(D^2>N -> !,fail;N mod D=:=0),
!.
is_prime(N):-not(not_prime(N)).
to_num([],Num,Num):-!.
to_num([X|Xs],Num,Result):-
Num1 is Num*10+X,
to_num(Xs,Num1,Result).
check(0):-!.
check(Num):-
is_prime(Num),
Num1 is Num//10,
check(Num1).
search(List,Num):-
member(E,[2,3,5,7]),
to_num([E|List],0,Num),
Num>10,
check(Num).
search(List,Result):-
member(E,[1,3,7,9]),
List1=[E|List],
to_num(List1,0,Num),
is_prime(Num),
search(List1,Result).
sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
Sum1 is Sum+X,
sum(Xs,Sum1,Result).
main:-
findall(Num,(member(E,[3,7]),search([E],Num)),Es),
msort(Es,Es1),
write(Es1),
sum(Es,0,Ans),
write(Ans).
最終更新:2014年12月03日 10:19