Sexy primes: Difference between revisions

no edit summary
(Convert to a task.)
No edit summary
Line 1,518:
 
0.176955 seconds
</pre>
 
=={{header|Scala}}==
<lang scala>/* We could reduce the number of functions through a polymorphism since we're trying to retrieve sexy N-tuples (pairs, triplets etc...)
but one practical solution would be to use the Shapeless library for this purpose; here we only use built-in Scala packages. */
 
object SexyPrimes {
 
/** Check if an input number is prime or not*/
def isPrime(n: Int): Boolean = ! ((2 until n-1) exists (n % _ == 0)) && n > 1
 
/** Retrieve pairs of sexy primes given a list of Integers*/
def getSexyPrimesPairs (primes : List[Int]) = {
primes
.map(n => if(primes.contains(n+6)) (n, n+6))
.filter(p => p != ())
.map{ case (a,b) => (a.toString.toInt, b.toString.toInt)}
}
 
/** Retrieve triplets of sexy primes given a list of Integers*/
def getSexyPrimesTriplets (primes : List[Int]) = {
primes
.map(n => if(
primes.contains(n+6) && primes.contains(n+12))
(n, n+6, n+12)
)
.filter(p => p != ())
.map{ case (a,b,c) => (a.toString.toInt, b.toString.toInt, c.toString.toInt)}
}
 
/** Retrieve quadruplets of sexy primes given a list of Integers*/
def getSexyPrimesQuadruplets (primes : List[Int]) = {
primes
.map(n => if(
primes.contains(n+6) && primes.contains(n+12) && primes.contains(n+18))
(n, n+6, n+12, n+18)
)
.filter(p => p != ())
.map{ case (a,b,c,d) => (a.toString.toInt, b.toString.toInt, c.toString.toInt, d.toString.toInt)}
}
 
/** Retrieve quintuplets of sexy primes given a list of Integers*/
def getSexyPrimesQuintuplets (primes : List[Int]) = {
primes
.map(n => if (
primes.contains(n+6) && primes.contains(n+12) && primes.contains(n+18) && primes.contains(n + 24))
(n, n + 6, n + 12, n + 18, n + 24)
)
.filter(p => p != ())
.map { case (a, b, c, d, e) => (a.toString.toInt, b.toString.toInt, c.toString.toInt, d.toString.toInt, e.toString.toInt) }
 
}
 
/** Retrieve all unsexy primes between 1 and a given limit from an input list of Integers*/
def removeOutsideSexyPrimes( l : List[Int], limit : Int) : List[Int] = {
l.filter(n => !isPrime(n+6) && n+6 < limit)
}
 
def main(args: Array[String]): Unit = {
val limit = 1000035
val l = List.range(1,limit)
val primes = l.filter( n => isPrime(n))
 
val sexyPairs = getSexyPrimesPairs(primes)
println("Number of sexy pairs : " + sexyPairs.size)
println("5 last sexy pairs : " + sexyPairs.takeRight(5))
 
val primes2 = sexyPairs.flatMap(t => List(t._1, t._2)).distinct.sorted
val sexyTriplets = getSexyPrimesTriplets(primes2)
println("Number of sexy triplets : " + sexyTriplets.size)
println("5 last sexy triplets : " + sexyTriplets.takeRight(5))
 
val primes3 = sexyTriplets.flatMap(t => List(t._1, t._2, t._3)).distinct.sorted
val sexyQuadruplets = getSexyPrimesQuadruplets(primes3)
println("Number of sexy quadruplets : " + sexyQuadruplets.size)
println("5 last sexy quadruplets : " + sexyQuadruplets.takeRight(5))
 
val primes4 = sexyQuadruplets.flatMap(t => List(t._1, t._2, t._3, t._4)).distinct.sorted
val sexyQuintuplets = getSexyPrimesQuintuplets(primes4)
println("Number of sexy quintuplets : " + sexyQuintuplets.size)
println("The last sexy quintuplet : " + sexyQuintuplets.takeRight(10))
 
val sexyPrimes = primes2.toSet
val unsexyPrimes = removeOutsideSexyPrimes( primes.toSet.diff((sexyPrimes)).toList.sorted, limit)
println("Number of unsexy primes : " + unsexyPrimes.size)
println("10 last unsexy primes : " + unsexyPrimes.takeRight(10))
 
}
 
}
</lang>
{{out}}
<pre>
Number of sexy pairs : 16386
5 last sexy pairs : List((999371,999377), (999431,999437), (999721,999727), (999763,999769), (999953,999959))
Number of sexy triplets : 2900
5 last sexy triplets : List((997427,997433,997439), (997541,997547,997553), (998071,998077,998083), (998617,998623,998629), (998737,998743,998749))
Number of sexy quadruplets : 325
5 last sexy quadruplets : List((977351,977357,977363,977369), (983771,983777,983783,983789), (986131,986137,986143,986149), (990371,990377,990383,990389), (997091,997097,997103,997109))
Number of sexy quintuplets : 1
The last sexy quintuplet : List((5,11,17,23,29))
Number of unsexy primes : 48627
10 last unsexy primes : List(999853, 999863, 999883, 999907, 999917, 999931, 999961, 999979, 999983, 1000003)
</pre>
 
Anonymous user