Jump to content

Sexy primes: Difference between revisions

no edit summary
m (Put Sieve of Eratosthenes implementation in separate header file)
No edit summary
Line 681:
[999853 999863 999883 999907 999917 999931 999961 999979 999983 1000003]
</pre>
=={{header|Haskell}}==
Uses Library primes. https://hackage.haskell.org/package/primes (wheel sieve).
<lang haskell>
import Data.Maybe
import Data.Numbers.Primes
 
findPairs :: Int -> [Int] -> Maybe (Int, Int)
findPairs _ [] = Nothing
findPairs p (p':ps)
| p' - p == 6 = Just (p, p')
| p' - p > 6 = Nothing
| otherwise = findPairs p ps
 
findTriplets :: [Int] -> (Int, Int) -> Maybe (Int, Int, Int)
findTriplets [] _ = Nothing
findTriplets xs (p1, p2) = (\(np1, np2) -> (p1, p2, np2)) <$> findPairs p2 xs
 
findQuadruplets :: [Int] -> (Int, Int, Int) -> Maybe (Int, Int, Int, Int)
findQuadruplets [] _ = Nothing
findQuadruplets xs (p1, p2, p3) = (\(np1, np2) -> (p1, p2, p3, np2)) <$> findPairs p3 xs
 
findQuinTuplets :: [Int] -> (Int, Int, Int, Int) -> Maybe (Int, Int, Int, Int, Int)
findQuinTuplets [] _ = Nothing
findQuinTuplets xs (p1, p2, p3, p4) = (\(np1, np2) -> (p1, p2, p3, p4, np2)) <$> findPairs p4 xs
 
searchPairs :: [Int] -> [(Int, Int)]
searchPairs [] = []
searchPairs p@(x:xs) = case findPairs x p of
(Just ps) -> ps : searchPairs xs
Nothing -> searchPairs xs
 
main :: IO ()
main = do
let ps = takeWhile (< 1000035) primes
let pairs = searchPairs ps
let triples = catMaybes $ map (findTriplets ps) pairs
let quads = catMaybes $ map (findQuadruplets ps) triples
let quins = catMaybes $ map (findQuinTuplets ps) quads
let sexy = asList pairs
let unsexy = filter (\p -> p `notElem` sexy) ps
 
putStrLn ("Number of sexy prime pairs: " ++ (show $ length pairs))
putStrLn ("Last 5 : " ++ (show $ lastFive pairs))
putStrLn ("Number of sexy prime triplets: " ++ (show $ length triples))
putStrLn ("Last 5 : " ++ (show $ lastFive triples))
putStrLn ("Number of sexy prime quadruplets: " ++ (show $ length quads))
putStrLn ("Last 5 : " ++ (show $ lastFive quads))
putStrLn ("Number of sexy prime quintuplets: " ++ (show $ length quins))
putStrLn ("Last 1 : " ++ show quins)
putStrLn ("Number of unsexy primes: " ++ (show $ length unsexy))
putStrLn ("Last 10 unsexy primes: " ++ (show $ lastTen unsexy))
where lastFive = reverse . take 5 . reverse
lastTen = reverse . take 10 . tail . reverse
asList p = fst t ++ snd t
where t = unzip p
</lang>
{{out}}
<pre>
Number of sexy prime pairs: 16386
Last 5 : [(999371,999377),(999431,999437),(999721,999727),(999763,999769),(999953,999959)]
Number of sexy prime triplets: 2900
Last 5 : [(997427,997433,997439),(997541,997547,997553),(998071,998077,998083),(998617,998623,998629),(998737,998743,998749)]
Number of sexy prime quadruplets: 325
Last 5 : [(977351,977357,977363,977369),(983771,983777,983783,983789),(986131,986137,986143,986149),(990371,990377,990383,990389),(997091,997097,997103,997109)]
Number of sexy prime quintuplets: 1
Last 1 : [(5,11,17,23,29)]
Number of unsexy primes: 48628
Last 10 unsexy primes: [999853,999863,999883,999907,999917,999931,999961,999979,999983,1000003]
</pre>
=={{header|Java}}==
<lang java>
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.