seed([1,2,3,4]). seed([1,2,3,4,5,6,7]). not_prime(N):-N<2. not_prime(N):- between(2,N,D), (N < D^2 ->!,fail;N mod D=:=0), !. is_prime(N):-not(not_prime(N)). perm([],N,N):-!. perm(Seed,N,R):- select(X,Seed,Seed1), N1 is N*10+X, perm(Seed1,N1,R). search(N):- seed(Seed), perm(Seed,0,N), is_prime(N). main:-findall(E,search(E),Es), sort(Es,Es1), reverse(Es1,[Ans|_]), write(Ans).