Long primes: Difference between revisions
m
→{{header|Haskell}}: Applied Hlint, Ormolu. Specified an import.
MaiconSoft (talk | contribs) (Added Delphi reference to Pascal code) |
m (→{{header|Haskell}}: Applied Hlint, Ormolu. Specified an import.) |
||
Line 832:
</pre>
=={{header|Haskell}}==
<lang Haskell>import Data.List (elemIndex)
longPrimesUpTo :: Int -> [Int]
longPrimesUpTo n =
takeWhile (<
where
▲ isLongPrime n = found
sieve (p : xs) = p
primes = sieve [2 ..]
index = findIndex (== head cycles) $ tail cycles▼
isLongPrime n = found
found = case index of (Just i) -> n - i == 2▼
where
cycles = take n (iterate ((`mod` n) . (10 *)) 1)
found = case index of
_ -> False
display :: Int -> IO ()
display n =
if n <= 64000
putStrLn (show n ++ " is " ++ show (length $ longPrimesUpTo n))▼
then do
display (n * 2)▼
( show n <> " is "
)
else pure ()
main :: IO ()
main = do
let fiveHundred = longPrimesUpTo 500
putStrLn
putStrLn ("500 is " ++ show (length fiveHundred))▼
<> show fiveHundred
display 1000▼
<> "\n"
)
▲ display 1000</lang>
{{out}}
<pre>The long primes up to 35 are:▼
▲The long primes up to 35 are:
[7,17,19,23,29,47,59,61,97,109,113,131,149,167,179,181,193,223,229,233,257,263,269,313,337,367,379,383,389,419,433,461,487,491,499]
Line 870 ⟶ 881:
16000 is 716
32000 is 1300
64000 is 2430</pre>
=={{header|J}}==
|