RosettaCodeData/Task/Factorial-primes/Haskell/factorial-primes.hs
2026-04-30 12:34:36 -04:00

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