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

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2044
Problem 44 「五角数」 †
5角数A,BがA+BもA-Bも5角数になるときA-Bの絶対値の最小値を求めよ。

とりあえず自分なりの解放。
A-Bの5角数をKとしてKが小さいほうから探索します。


is5(Sum):-
	Sum1 is sqrt(1+24*Sum),
	integer(Sum1)^2=:=1+24.0*Sum,
	integer(Sum1+1) mod 6=:=0.


check(K):-
	between(1,K,A),
	(K=<A^2->!,fail;true),
	K mod A=:=0,
	B is K//A,
        M1 is B-3*A+1,
 	M1 mod 6=:=0,
	M1>0,
	M2 is M1//6,
	N2 is A+M2,
	SumA is N2*(3*N2-1)//2,
	SumB is M2*(3*M2-1)//2,
 	SumC is SumA+SumB,
	is5(SumC),
	!.


main:-
	between(1,5000,K),
	K1 is K*(3*K-1),
	K2 is K1//2,
	check(K1),
	write(K2).
最終更新:2014年12月05日 04:14