fork download
  1. -- prime numbers
  2.  
  3. sieve [] = []
  4.  
  5. sieve (x:u) = x : (sieve (filter (\y -> mod y x /= 0) u))
  6.  
  7. allPrimes = sieve [2..]
  8.  
  9. divisorsFrom x u@(y:v)
  10. | x == 1 = []
  11. | (mod x y == 0) = y : divisorsFrom (div x y) u
  12. | otherwise = divisorsFrom x v
  13.  
  14. divisors x = divisorsFrom x allPrimes
  15.  
  16. main = do (print (sum (takeWhile (<130000) (sieve [2..2000000]))))
  17.  
  18. -- print (divisors 600851475143)
  19. -- print (allPrimes !! 10000)
Success #stdin #stdout 8.69s 5640KB
stdin
Standard input is empty
stdout
749586246