Problem 41 「パンデジタル素数」 †
n桁パンデジタルであるとは, 1からnまでの数を各桁に1つずつ持つこととする.
#下のリンク先にあるような数学的定義とは異なる
例えば2143は4桁パンデジタル数であり, かつ素数である. n桁(この問題の定義では9桁以下)パンデジタルな素数の中で最大の数を答えよ.
解法
まあ1~9、1~8までの各桁の和を足すと9の倍数になるので素数が存在しません。
7ケタの場合を全部検討して素数が見つかれば。
それが答えだ(ウルフルズ風味な節をつけて、古いな)。
not_prime(N):-N<2,!.
not_prime(N):-
between(2,N,D),
(D*D>N->!,fail;true),
N mod D=:=0,
!.
is_prime(N):-not(not_prime(N)).
perm([],[]):-!.
perm(List,[X|Result]):-
select(X,List,List1),
perm(List1,Result).
search(Num):-
List=[49,50,51,52,53,54,55],
perm(List,NumList),
number_codes(Num,NumList),
is_prime(Num).
main41:-
findall(E,search(E),List),
msort(List,List1),
reverse(List1,[Top|_]),
write(Top).
0 件のコメント:
コメントを投稿