RosettaCodeData/Task/Pythagorean-triples/Haskell/pythagorean-triples-1.hs
2017-09-25 22:28:19 +02:00

22 lines
474 B
Haskell

pytr :: Int -> [(Bool, Int, Int, Int)]
pytr n =
filter
(\(_, a, b, c) -> a + b + c <= n)
[ (prim a b c, a, b, c)
| a <- xs
, b <- drop a xs
, c <- drop b xs
, a ^ 2 + b ^ 2 == c ^ 2 ]
where
xs = [1 .. n]
prim a b _ = gcd a b == 1
main :: IO ()
main =
putStrLn $
"Up to 100 there are " ++
show (length xs) ++
" triples, of which " ++
show (length $ filter (\(x, _, _, _) -> x) xs) ++ " are primitive."
where
xs = pytr 100