Prime numbers

From HaskellWiki
Revision as of 16:33, 5 February 2007 by MathematicalOrchid (talk | contribs) (I hope this amuses somebody...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

The following is an elegant (and highly inefficient) way to generate a list of all the prime numbers in the universe:

  primes = sieve [2..] where
    sieve (p:xs) = filter (\x -> x `mod` p == 0) xs

With this definition made, a few other useful (??) functions can be added:

  is_prime n = n `elem` (takeWhile (n >) primes)

  factors n = filter (\p -> n `mod` p == 0) $ takeWhile (n >) primes)

  factorise 1 = []
  factorise n =
    let f = head $ factors n
    in  f : factorise (n `div` f)

(Note the repeated use of takeWhile to prevent the infinite list of primes requiring an infinite amount of CPU time and RAM to process!)