import Data.Array.ST import Data.Array.Unboxed sieve n = runSTUArray $ do bits <- newArray (0, m-1) True isPrime <- readArray bits i when isPrime $ do forM_ [2*i*i+6*i+3, 2*i*i+8*i+6 .. (m-1)] $ \j -> do writeArray bits j False return bits primes n = 2 : [2*i+3 | (i, True) <- assocs $ sieve n] main = do
Standard input is empty