Advertisement
Guest User

Untitled

a guest
Aug 19th, 2023
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haskell 0.91 KB | Source Code | 0 0
  1. import Data.List (sort, length)
  2. import Data.Array.Unboxed
  3.  
  4.  
  5. containsEveryDigitOnce :: Int -> Bool
  6. containsEveryDigitOnce number = sortedDigits == [0..9]
  7.     where
  8.         digits = map (`mod` 10) $ takeWhile (> 0) $ iterate (`div` 10) number
  9.         sortedDigits = sort digits
  10.  
  11.  
  12. primesToNA :: Int -> [Int]
  13. primesToNA n = 2 : [i | i <- [3, 5..n], ar ! i]
  14.   where
  15.     ar = f 5 $ accumArray (\a b -> False) True (3, n)
  16.       [(i, ()) | i <- [9, 15..n]]
  17.     f p a
  18.       | q > n = a
  19.       | otherwise = if null x then a2 else f (head x) a2
  20.       where
  21.         q = p * p
  22.         a2 :: UArray Int Bool
  23.         a2 = a // [(i, False) | i <- [q, q + 2 * p..n]]
  24.         x = [i | i <- [p + 2, p + 4..n], a2 ! i]
  25.  
  26.  
  27. findPairs :: [(Int, Int)]
  28. findPairs = [(p, q) | p <- primesToNA 100000, q <- primesToNA 2200, (p^2 + q^3) <= 98765432100, containsEveryDigitOnce (p^2 + q^3)]
  29.  
  30. main :: IO ()
  31. main = print (length findPairs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement