31 lines
670 B
Prolog
31 lines
670 B
Prolog
isPrime(2).
|
|
isPrime(N):-
|
|
between(3, inf, N),
|
|
N /\ 1 > 0, % odd
|
|
M is floor(sqrt(N)) - 1, % reverse 2*I+1
|
|
Max is M div 2,
|
|
forall(between(1, Max, I), N mod (2*I+1) > 0).
|
|
|
|
combi(0, _, Num, Num).
|
|
combi(N, [X|T], Acc, Num):-
|
|
N > 0,
|
|
N1 is N - 1,
|
|
Acc1 is Acc * 10 + X,
|
|
combi(N1, T, Acc1, Num).
|
|
combi(N, [_|T], Acc, Num):-
|
|
N > 0,
|
|
combi(N, T, Acc, Num).
|
|
|
|
ascPrimes(Num):-
|
|
between(1, 9, N),
|
|
combi(N, [1, 2, 3, 4, 5, 6, 7, 8, 9], 0, Num),
|
|
isPrime(Num).
|
|
|
|
showList(List):-
|
|
findnsols(10, DPrim, (member(DPrim, List), writef('%9r', [DPrim])), _),
|
|
nl,
|
|
fail.
|
|
showList(_).
|
|
|
|
do:-findall(DPrim, ascPrimes(DPrim), DList),
|
|
showList(DList).
|