Sum multiples of 3 and 5: Difference between revisions

m
m (more idiomatic point-free definition of triangular)
Line 1,612:
Also a method for calculating sum of multiples of any list of numbers.
<lang haskell>import Data.List (nub)
 
--------------------------- TESTSUM MULTIPLES OF 3 AND 5 ---------------------------
 
sum35 :: Integer -> Integer
sum35 n = f 3 + f 5 - f 15
where
let f = sumMul n
in f 3 + f 5= - fsumMul 15n
 
sumMul :: Integer -> Integer -> Integer
sumMul n f = f * n1 * (n1 + 1) `div` 2
where
let n1 = (n - 1) `div` f
in f * n1 *= (n1n +- 1) `div` 2f
 
 
--------------------------- FOR VARIABLE LENGTH INPUTSTEST -------------------------
main :: IO ()
main =
mapM_
print
[ sum35 1000,
, sum35 100000000000000000000000000000000,
, sumMulS 1000 [3, 5],
, sumMulS 10000000 [2, 3, 5, 7, 11, 13]
]</lang>
 
---------------- FOR VARIABLE LENGTH INPUTS --------------
 
pairLCM :: [Integer] -> [Integer]
pairLCM [] = []
pairLCM (x : xs) = (lcm x <$> xs) ++<> pairLCM xs
 
sumMulS :: Integer -> [Integer] -> Integer
sumMulS _ [] = 0
sumMulS n s =
let( f((-) =. sumMulsum n. fmap f)
g<*> =(g sumMulS. npairLCM)
)
in (((-) . sum . fmap f) <*> (g . pairLCM)) (nub s)
(nub s)
 
where
 
let f = sumMul n
--------------------------- TEST ---------------------------
g = sumMulS n</lang>
main :: IO ()
main =
mapM_
print
[ sum35 1000
, sum35 100000000000000000000000000000000
, sumMulS 1000 [3, 5]
, sumMulS 10000000 [2, 3, 5, 7, 11, 13]
]</lang>
{{out}}
<pre>233168
9,655

edits