fork download
  1. isPrime(2).
  2. isPrime(3).
  3.  
  4. isPrime(X) :- X > 2, integer(X), X mod 2 =:= 1, \+ has_factor(X, 3).
  5.  
  6. has_factor(X, L) :- X mod L =:= 0.
  7. has_factor(X, L) :- L * L < X, Lnew is L + 2, has_factor(X, Lnew).
  8.  
  9. num_length(X, N) :- N is floor(log10(X) + 1).
  10.  
  11. numberToList(Number, List, Length) :- numberToList(Number, [], List, Length).
  12. numberToList(_, X, X, 0).
  13. numberToList(Number, A, X, Length) :-
  14. NumberNew is Number // 10,
  15. R is Number rem 10,
  16. append([R], A, Anew),
  17. Length =\= 0,
  18. LengthNew is Length - 1,
  19. numberToList(NumberNew, Anew, X, LengthNew).
  20.  
  21. number_of_el([X], X, 1).
  22. number_of_el([X], Y, 0) :- X =\= Y.
  23. number_of_el(List, Element, X) :-
  24. List = [H | Tail],
  25. (
  26. (H = Element, X = Xnew + 1, number_of_el(Tail, Element, Xnew))
  27. ;
  28. (H =\= Element, number_of_el(Tail, Element, X))).
  29.  
  30. match3(X, Dig) :-
  31. num_length(X, N),
  32. numberToList(X, List, N),
  33. numlist(0, 9, Digits),
  34. member(Dig, Digits),
  35. number_of_el(List, Dig, Q),
  36. Q >= 3,
  37. !.
  38.  
  39. makePrimes(List):- findall([L, D], (between(100000, 999999, X), isPrime(X), match3(X, D), numberToList(X, L, 6)), List).
  40.  
  41. main(X) :-
  42. time(makePrimes(List)),
  43. numlist(0, 9, Digits),
  44. member(X, List),
  45. member(D, Digits),
  46. X = [[1,0,D,D,1,D], _].
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty