Skip to content

Instantly share code, notes, and snippets.

@onemouth
Last active December 22, 2015 02:48
Show Gist options
  • Save onemouth/6405402 to your computer and use it in GitHub Desktop.
Save onemouth/6405402 to your computer and use it in GitHub Desktop.
sieve.hs
import Data.List
import qualified Data.Map as Map
sieve xs = sieve' xs Map.empty
sieve' [] table = []
sieve' (x:xs) table =
case Map.lookup x table of
Nothing -> x: sieve' xs (Map.insert (x+x) [x] table)
Just facts -> sieve' xs (foldl' reinsert (Map.delete x table) facts)
where reinsert table prime = Map.insertWith (++) (x+prime) [prime] table
primes = sieve [2..]
main = print $ take 50 primes
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment