Problem 9

A Pythagorean triplet is a set of three natural numbers, [tex:$a

ピタゴラス数とは自然数の三つ組$(a,b,c)$で[tex:$a

[Haskell]

{-
Project Euler Problem 9 e9.hs
-}
line:: Int -> [(Int,Int)]
line k = [(i,k-i) | i<-[0..k], i*k == 500, i>k-i ]

lattice::[(Int,Int)]
lattice = concat [line k | k<-[1..500] ]

ans= head [ (m^2-n^2)*(2*m*n)*(m^2+n^2) | (m,n)<- lattice ]

ピタゴラス数の一般式に「和が1000」という条件を入れるだけですが,パラメータm,nにいれる値を細工しています.結果,「和が1000」という条件はlineの1*k==500にまで変形されます.さらに,m>nの条件もiとkの条件にしています.直線上の格子点をまとめる際にも500まで集めれば十分です.
結果は

*Main> :l e9.hs
[1 of 1] Compiling Main             ( e9.hs, interpreted )
Ok, modules loaded: Main.
*Main> ans
31875000
*Main> 

です.