「プロジェクトオイラー問85」の編集履歴(バックアップ)一覧はこちら
「プロジェクトオイラー問85」(2014/03/03 (月) 16:25:23) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2085
*Problem 85 「長方形の数え上げ」 †
注意深く数えると, 横が3, 縦が2の長方形の格子には, 18個の長方形が含まれている.
ぴったり2,000,000個の長方形を含むような長方形の格子は存在しない. 一番近い解を持つような格子の面積を求めよ.
解法
w<=Hとしても一般性を失いません。
wを定めたら条件を満たすhは2次方程式の解となるのでその近辺の整数を探すだけです。
hanni(X,X1):-
between(-2,2,D),
X1 is X+D.
calc([Sa,H1,W,S]):-
between(1,3000,W),
D is (8000*1000)//(W*W+W),
D>0,
H is floor((-1+sqrt(1+D*4))/2),
(H<W->!,fail;true),
hanni(H,H1),
H1>0,
Sa is abs(2000*1000-(H1*(H1+1)*W*(W+1))//4),
S is H1*W.
main85:-
findall(E,calc(E),All),
sort(All,[Ans|_]),
write(Ans).