fork download
  1. import Data.Array.Unboxed
  2.  
  3. primesSA :: [Int]
  4. primesSA = 2 : oddprimes ()
  5. where
  6. oddprimes () = 3 : sieve (oddprimes ()) 3 []
  7. sieve (p:ps) x fs = [i*2 + x | (i,True) <- assocs a]
  8. ++ sieve ps (p*p) ((p,0) :
  9. [(s, rem (y-q) s) | (s,y) <- fs])
  10. where
  11. q = (p*p-x)`div`2
  12. a :: UArray Int Bool
  13. a = accumArray (\ b c -> False) True (1,q-1)
  14. [(i,()) | (s,y) <- fs, i <- [y+s, y+s+s..q]]
  15.  
  16. main = getLine >>= -- 2/1 mln: n^1.08 !
  17. (\r-> print . last . take (read r) $ primesSA)
Success #stdin #stdout 2.58s 7736KB
stdin
2000000
stdout
32452843