Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Data.List (sort, length)
- import Data.Array.Unboxed
- containsEveryDigitOnce :: Int -> Bool
- containsEveryDigitOnce number = sortedDigits == [0..9]
- where
- digits = map (`mod` 10) $ takeWhile (> 0) $ iterate (`div` 10) number
- sortedDigits = sort digits
- primesToNA :: Int -> [Int]
- primesToNA n = 2 : [i | i <- [3, 5..n], ar ! i]
- where
- ar = f 5 $ accumArray (\a b -> False) True (3, n)
- [(i, ()) | i <- [9, 15..n]]
- f p a
- | q > n = a
- | otherwise = if null x then a2 else f (head x) a2
- where
- q = p * p
- a2 :: UArray Int Bool
- a2 = a // [(i, False) | i <- [q, q + 2 * p..n]]
- x = [i | i <- [p + 2, p + 4..n], a2 ! i]
- findPairs :: [(Int, Int)]
- findPairs = [(p, q) | p <- primesToNA 100000, q <- primesToNA 2200, (p^2 + q^3) <= 98765432100, containsEveryDigitOnce (p^2 + q^3)]
- main :: IO ()
- main = print (length findPairs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement