hw4: sieve of sundaram
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sat, 20 Dec 2014 16:05:20 +0000 (21:35 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Sat, 20 Dec 2014 16:05:20 +0000 (21:35 +0530)
hw4/hw4.hs

index 455d8b9e6f20b7b9a78ba296ac1d7361252f896a..078aab2ed879a02dce81671510da9b7e0a8e8d61 100644 (file)
@@ -2,6 +2,8 @@
 
 module Hw4 where
 
+import qualified Data.List as L
+
 -- wholemeal programming
 {- |
 
@@ -81,3 +83,17 @@ xor bs = foldr f False bs
 map' :: (a -> b) -> [a] -> [b]
 map' f = foldr f' []
     where f' x acc = (f x) : acc
+
+-- exercise 5
+-- Sieve of Sundaram
+
+cartProd :: [a] -> [b] -> [(a,b)]
+cartProd xs ys = [(x, y) | x <- xs, y <- ys]
+
+genList :: Integer -> [Integer]
+genList n = [1..n]
+
+sieveSundaram :: Integer -> [Integer]
+sieveSundaram n = map (\x -> (2*x + 1)) $ (L.\\) xs $ L.sort $ f (cartProd xs xs)
+    where xs = genList n
+          f ps =  L.nub $ filter (<= n) $ map (\(i,j) -> i + j + 2*i*j) ps