{-# OPTIONS_GHC -O2 #-} module Main where import Data.Array import Data.List (unfoldr) import Control.Monad primesFromTo a b = (if a<3 then [2] else []) ++ [i | i <- [o,o+2..b], ar ! i] where o = max (if even a then a+1 else a) 3 r = floor.sqrt.fromInteger $ b+1 ar = accumArray (\a b-> False) True (o,b) [(i,()) | p <- [3,5..r] , let q = p*p s = 2*p (n,x) = quotRem (o - q) s q' = if o <= q then q else q + (n + signum x)*s , i <- [q',q'+s..b] ] main = do a <- getLine b <- getLine let ps = primesFromTo (read a) (read b) forM_ (groups 4 ps) print forM_ (groups 20 $ zipWith (-) (tail ps) ps) print groups = unfoldr . listMaybe . splitAt listMaybe _ [] = Nothing listMaybe f xs = Just (f xs)