[Haskell-cafe] For Project Euler #1 isn't it more efficient to generate just the numbers you need? <Spoiler>

caseyh at istar.ca caseyh at istar.ca
Sat May 7 01:31:14 CEST 2011


-- Instead of this
-- sumMultiples3or5 s = sum [x | x <- [3..s-1], x `mod` 3 == 0 || x  
`mod` 5 == 0]


-- Isn't this faster

sumMultiples3or5 s = sum ([x | x <- [3,6..s-1]] `merge` [x | x <-  
[5,10..s-1]])

merge xs [] = xs
merge [] ys = ys
merge txs@(x:xs) tys@(y:ys)
     | x < y     = x : xs `merge` tys
     | x > y     = y : txs `merge` ys
     | otherwise = x : xs `merge` ys





More information about the Haskell-Cafe mailing list