24 lines
721 B
Haskell
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]
|