「プロジェクトオイラー問91」の編集履歴(バックアップ)一覧はこちら

プロジェクトオイラー問91」(2014/03/04 (火) 11:42:53) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2091 *Problem 91 「整数座標における直角三角形」 † 原点Oと2つの整数点(x,y)、x、yは0から50までの数。 で何個直角三角形が描けるか答える問題。 解法 点Aを定めたらOAと直角でAを通る直線状の点だけを検討します。 それだけでパッと答えが出ます。 原点が直角になる場合だけ特別扱いしてアセプトとなります。 sum([],0):-!. sum([X|Xs],Result):-sum(Xs,Re),Result is Re+X. points([X,Y]):- between(0,50,X), between(0,50,Y), X+Y>0. calc1(_,0,_,_,50):-!. calc1(0,_,_,_,50):-!. calc1(DX,DY,X,Y,Result):- T1 is (50-X)//DX, T2 is Y//DY, min(T1,T2,T3), T4 is X//DX, T5 is (50-Y)//DY, min(T4,T5,T6), Result is T3+T6. calc(Points,Result):- member([X,Y],Points), gcd(X,Y,G), DX is Y//G, DY is X//G, calc1(DX,DY,X,Y,Result) . main91:- findall(P,points(P),Points), findall(Sum,calc(Points,Sum),Sums), sum(Sums,Ans), Ans1 is Ans+50*50, write(Ans1).

表示オプション

横に並べて表示:
変化行の前後のみ表示: