Guest User

Untitled

a guest
Jun 25th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. module Main where
  2.  
  3. import List
  4.  
  5. main :: IO ()
  6. main = do
  7. noOfTestCases <- readLn
  8. readTestCases noOfTestCases
  9.  
  10. readTestCases :: Integer -> IO ()
  11. readTestCases noOfTestCases = do
  12. if noOfTestCases > 0
  13. then do
  14. input <- getLine
  15. let rawLimits = map readInt $ words input
  16. let limits = (rawLimits !! 0, rawLimits !! 1)
  17. putStrLn $ concat . List.intersperse "\n" $ map show $ primesBetween limits
  18. putStrLn ""
  19. readTestCases $ noOfTestCases-1
  20. else
  21. return ()
  22.  
  23. readInt :: String -> Integer
  24. readInt i = read i :: Integer
  25.  
  26. primes = 2:3:5:7: filter isPrime [11,13..]
  27.  
  28. isPrime :: Integer -> Bool
  29. isPrime x
  30. | x == 1 = False
  31. | x == 2 = True
  32. | x == 3 = True
  33. | not $ or [(x + 1) `mod` 6 == 0, (x - 1) `mod` 6 == 0] = False
  34. | otherwise = null . primeDivisors $ x
  35.  
  36. primeDivisors x = filter (\y -> x `mod` y == 0)
  37. $ takeWhile (<= (ceiling . sqrt . fromInteger $ x)) primes
  38.  
  39. primesBetween :: (Integer, Integer) -> [Integer]
  40. primesBetween (n1, n2) = takeWhile (<= n2) $ dropWhile (< n1) primes
Add Comment
Please, Sign In to add comment