Project Euler – 問題39

pを辺の長さが整数{a,b,c}の直角三角形の周囲の長さとしたとき、p = 120には ちょうど3つの解が存在し、{20,48,52},{24,45,51},{30,40,50}である。

p<1000でもっとも解の数が多くなるものを求めよ。

周囲の長さとそのときの三辺の長さの組み合わせのtupleを対象として最大値を 求める。三辺の組み合わせはリストの内包表記を用いて全て求める。

euler039 = fst $ maximumBy cmpSnd [(n, length $ sols n) | n <- [3..999]]
    where sols n = [(i, j, n - i - j)
                    |i <- [1..n - 2], j <- [i..(n - i) `div` 2],
                    i ^ 2 + j ^ 2 == (n - i - j) ^ 2]