Primes which contain only one odd digit: Difference between revisions

→‎{{header|Haskell}}: Added a Haskell version
(→‎{{header|Haskell}}: Added a Haskell version)
Line 237:
There are 2,560 primes under 1,000,000 which contain only one odd digit.
</pre>
 
=={{header|Haskell}}==
<lang haskell>import Data.List (intercalate, maximum, transpose)
import Data.List.Split (chunksOf)
import Data.Numbers.Primes (primes)
import Text.Printf (printf)
 
 
------------------ ONE ODD DECIMAL DIGIT -----------------
 
singleOddDecimalDigit :: Int -> Bool
singleOddDecimalDigit =
(1 ==) . length . filter odd . digits
 
digits :: Int -> [Int]
digits = fmap (read . return) . show
 
 
--------------------------- TEST -------------------------
main :: IO ()
main = do
putStrLn "Below 1000:"
(putStrLn . table " " . chunksOf 10 . fmap show) $
sampleBelow 1000
 
putStrLn "Count of matches below 10E6:"
(print . length) $
sampleBelow 1000000
 
sampleBelow :: Int -> [Int]
sampleBelow =
filter singleOddDecimalDigit
. flip takeWhile primes
. (>)
 
------------------------- DISPLAY ------------------------
 
table :: String -> [[String]] -> String
table gap rows =
let ws = maximum . fmap length <$> transpose rows
pw = printf . flip intercalate ["%", "s"] . show
in unlines $ intercalate gap . zipWith pw ws <$> rows</lang>
{{Out}}
<pre>Below 1000:
3 5 7 23 29 41 43 47 61 67
83 89 223 227 229 241 263 269 281 283
401 409 421 443 449 461 463 467 487 601
607 641 643 647 661 683 809 821 823 827
829 863 881 883 887
 
Count of matches below 10E6:
2560</pre>
 
=={{header|Julia}}==
9,655

edits