euler/Problem035.hs

24 lines
721 B
Haskell

-- The number, 197, is called a circular prime because all rotations of the
-- digits: 197, 971, and 719, are themselves prime.
--
-- There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37,
-- 71, 73, 79, and 97.
--
-- How many circular primes are there below one million?
import Euler
import Data.Array.Unboxed
import Data.Array.ST
rotations n = map (fromDigits . take (length digits))
$ take (length digits)
$ tails (cycle digits)
where digits = toDigits n
main = do
let limit = 1000000 - 1
let isPrimeArr = isPrimeArray limit
let isPrime n = (isPrimeArr!n) /= 0
let circular n = all isPrime $ rotations n
print $ length $ filter circular [2..limit]