Sum multiples of 3 and 5: Difference between revisions
Content added Content deleted
(→JS ES6: Tidied code, added formatting for output.) |
m (→{{header|Haskell}}: Tidying) |
||
Line 1,505: | Line 1,505: | ||
<lang haskell>import Data.List (nub) |
<lang haskell>import Data.List (nub) |
||
sum35 :: |
sum35 :: Integer -> Integer |
||
sum35 n = |
|||
sum35 n = sumMul n 3 + sumMul n 5 - sumMul n 15 |
|||
let f = sumMul n |
|||
in f 3 + f 5 - f 15 |
|||
sumMul :: |
sumMul :: Integer -> Integer -> Integer |
||
sumMul n f = |
sumMul n f = |
||
let n1 = (n - 1) `div` f |
|||
where |
|||
n1 |
in f * n1 * (n1 + 1) `div` 2 |
||
-- |
-- For variable length inputs: |
||
⚫ | |||
⚫ | |||
pairLCM [] = [] |
pairLCM [] = [] |
||
pairLCM (x:xs) = (lcm x <$> xs) ++ pairLCM xs |
pairLCM (x:xs) = (lcm x <$> xs) ++ pairLCM xs |
||
sumMulS :: |
sumMulS :: Integer -> [Integer] -> Integer |
||
sumMulS _ [] = 0 |
sumMulS _ [] = 0 |
||
sumMulS n s = sum (sumMul n < |
sumMulS n s = (((-) . sum . fmap (sumMul n)) <*> (sumMulS n . pairLCM)) (nub s) |
||
where |
|||
ss = nub s |
|||
main :: IO () |
main :: IO () |