Sexy primes: Difference between revisions

m
Line 694:
type Quin = (Int, Int, Int, Int, Int)
 
datatype Result = Result ([Pair], [Triplet], [Quad], [Quin], [Int])
 
groups :: Int -> Result -> Result
groups n r@(Result p, t, q, qn, u)
| isPrime (n-24)n4 && isPrime (n-18)n3 && isPrime (n-12)n2 && isPrime (n-6)n1 = Result(addPair, asPairaddTriplet, asTripletaddQuad, asQuad asQuinaddQuin, u)
| isPrime (n-18)n3 && isPrime (n-12)n2 && isPrime (n-6) n1 = Result(addPair, asPairaddTriplet, asTriplet asQuadaddQuad, qn, u)
| isPrime (n-12)n2 && isPrime (n-6) n1 = Result asPair(addPair, asTripletaddTriplet, q, qn, u)
| isPrime (n-6) n1 = Result asPair(addPair, t, q, qn, u)
| not (isPrime (n+6)) && not (isPrime (n-6)n1) = Result (p, t, q, qn, (n : u)
| otherwise = r
where asPairaddPair = (n-6n1, n) : p
asTripletaddTriplet = (n-12n2, n-6n1, n) : t
asQuadaddQuad = (n-18n3, n-12n2, n-6n1, n) : q
asQuinaddQuin = (n-24n4, n-18n3, n-12n2, n-6n1, n) : qn
n1 = n - 6
n2 = n - 12
n3 = n - 18
n4 = n - 24
 
main :: IO ()
main = do
printf ("Number of sexy prime pairs: %d\n" ++<> lastFiveText) (length pairs) (lastFive pairs)
printf ("Number of sexy prime triplets: %d\n" ++<> lastFiveText) (length triplets) (lastFive triplets)
printf ("Number of sexy prime quadruplets: %d\n" ++<> lastFiveText) (length quads) (lastFive quads)
printf "Number of sexy prime quintuplets: %d\n Last 1 : %s\n\n" (length quins) (show $ drop (length quins -1)last quins)
printf "Number of unsexy primes: %d\n Last 10: %s\n\n" (length unsexy) (show $ drop (length unsexy - 10) unsexy)
where (Result pairs, triplets, quads, quins, unsexy) = foldr groups (Result [], [], [], [], []) $ takeWhile (< 1000035) primes
lastFive xs = show $ drop (length xs - 5) xs
lastFiveText = " Last 5 : %s\n\n"</lang>
Anonymous user