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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2043
Problem 43 「部分列被整除性」 †
何も考えず枝狩りしながら全探索で間に合います。

search2(_,[],[],Num,Num):-
	!.
search2([D1,D2],Seed,[Div|Divs],Num,Result):-
	select(D3,Seed,Seed1),
	N is D1*100+D2*10+D3,
	N mod Div=:=0,
	Num1 is Num*10+D3,
	search2([D2,D3],Seed1,Divs,Num1,Result).

search(Num2):-
Seed=[0,1,2,3,4,5,6,7,8,9],
	select(D1,Seed,Seed1),
	D1>0,
 	select(D2,Seed1,Seed2),
	select(D3,Seed2,Seed3),
	Num is D1*100+D2*10+D3,
	search2([D2,D3],Seed3,[2,3,5,7,11,13,17],Num,Num2).

sum([],Sum,Sum):-!.
sum([X|Xs],Sum,Result):-
	Sum1 is Sum+X,
	sum(Xs,Sum1,Result).
main:-
	findall(E,search(E),Es),
	sum(Es,0,Ans),
	write(Ans).
最終更新:2014年12月05日 02:49