# 99 questions/Solutions/39

### From HaskellWiki

< 99 questions | Solutions(Difference between revisions)

m |
|||

Line 14: | Line 14: | ||

<haskell> | <haskell> | ||

primes :: Integral a => [a] | primes :: Integral a => [a] | ||

− | primes = let sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ] in sieve [2..] | + | primes = let sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ] |

+ | in sieve [2..] | ||

primesR :: Integral a => a -> a -> [a] | primesR :: Integral a => a -> a -> [a] |

## Revision as of 05:21, 31 May 2011

(*) A list of prime numbers.

Given a range of integers by its lower and upper limit, construct a list of all prime numbers in that range.

Solution 1:

primesR :: Integral a => a -> a -> [a] primesR a b = filter isPrime [a..b]

If we are challenged to give all primes in the range between a and b we simply take all number from a up to b and filter the primes out.

Solution 2:

primes :: Integral a => [a] primes = let sieve (n:ns) = n:sieve [ m | m <- ns, m `mod` n /= 0 ] in sieve [2..] primesR :: Integral a => a -> a -> [a] primesR a b = takeWhile (<= b) $ dropWhile (< a) primes

*Sieve of Eratosthenes*. The

primes

primesR

*Sieve of Eratosthenes*can be implemented in Haskell :)]