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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2030
Problem 30 「各桁の5乗」 †
各桁の5乗和が元の数と一致する自然数(1は除く)の総和を求めよ。

check(0,[]):-!.
check(0,_):-!,fail.
check(N,Xs):-
	X is N mod 10,
	select(X,Xs,Xs1),
	!,
	N1 is N//10,
	check(N1,Xs1).

perm(6,_,[],Sum,Sum):-!.
perm(_,_,[],Sum,Sum):-Sum>0.
perm(Len,N,[X|Xs],Sum,Result):-
	!,
 	between(N,9,X),
	Sum1 is Sum+X^5,
	Len1 is Len+1,
	perm(Len1,X,Xs,Sum1,Result).

sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
	Sum1 is Sum+X,
	sum(Xs,Sum1,Result).

search(Sum):-
	perm(0,0,Xs,0,Sum),
	not(Xs=[1]),
	check(Sum,Xs).

main:-
	findall(E,search(E),Es),
	sum(Es,0,Ans),
	write(Ans).
最終更新:2014年12月01日 08:27