Difference between revisions of "99 questions/Solutions/41"

From HaskellWiki
Jump to navigation Jump to search
 
 
(One intermediate revision by one other user not shown)
Line 11: Line 11:
   
 
using the <tt>goldbach</tt> function from problem 40.
 
using the <tt>goldbach</tt> function from problem 40.
  +
  +
Or a more concise version:
  +
<haskell>
  +
goldbachList n m = map goldbach $ dropWhile (<4) $ filter even [n..m]
  +
goldbachList' n m i = filter (\(x,y) -> x > i && y > i) $ goldbachList n m
  +
</haskell>
  +
Note the <hask>dropWhile</hask>, as the question explicitly asks for the range 1-2000 (although we know better).
  +
  +
  +
[[Category:Programming exercise spoilers]]

Latest revision as of 19:48, 18 January 2014

(**) Given a range of integers by its lower and upper limit, print a list of all even numbers and their Goldbach composition.

In most cases, if an even number is written as the sum of two prime numbers, one of them is very small. Very rarely, the primes are both bigger than say 50. Try to find out how many such cases there are in the range 2..3000.

goldbachList lb ub = map goldbach $ [even_lb,even_lb+2..ub]
  where even_lb = max ((lb+1) `div` 2 * 2) 4
goldbachList' lb ub mv = filter (\(a,b) -> a > mv && b > mv) $
                         goldbachList lb ub

using the goldbach function from problem 40.

Or a more concise version:

goldbachList n m = map goldbach $ dropWhile (<4) $ filter even [n..m]
goldbachList' n m i = filter (\(x,y) -> x > i && y > i) $ goldbachList n m

Note the dropWhile, as the question explicitly asks for the range 1-2000 (although we know better).