プロジェクトオイラー問41

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2041
Problem 41 「パンデジタル素数」 †
パンデジタル数かつ素数であるもののうち最大の数を答えよ。
素数なので効率の良い解法への道はあまりありませんが全探索で片が付きます。
3で割れない桁数は4桁と7桁だけなのでそれだけ調べます。


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).
最終更新:2014年12月03日 11:54