26 lines
775 B
Haskell
26 lines
775 B
Haskell
isPrime :: Integer -> Bool
|
|
isPrime n
|
|
| n < 2 = False
|
|
| n == 2 = True
|
|
| otherwise = 0 == length [i | i <- [2..floor(sqrt (fromIntegral n))], n `mod` i == 0]
|
|
|
|
data Op = SubtractOne | AddOne
|
|
deriving (Show)
|
|
|
|
data Prime = Prime
|
|
{ fact :: Integer,
|
|
prime :: Integer,
|
|
op :: Op
|
|
} deriving (Show)
|
|
|
|
getFactorialPrimes :: Integer -> [Prime]
|
|
getFactorialPrimes n
|
|
| isPrime (f - 2) = Prime {fact = n, prime = f - 2, op = SubtractOne} :
|
|
(if isPrime f then [Prime {fact = n, prime = f, op = AddOne}] else [])
|
|
| otherwise = (if isPrime f then [Prime {fact = n, prime = f, op = AddOne}] else [])
|
|
where
|
|
factorial n = product[1..n]
|
|
f = factorial n + 1
|
|
|
|
factorialPrimes = concat $ map getFactorialPrimes [1..]
|
|
main = mapM_ print $ take 10 factorialPrimes
|