Cullen and Woodall numbers: Difference between revisions

Add Scala implementation
(Add PARI/GP implementation)
(Add Scala implementation)
 
Line 1,547:
First 12 Woodall primes in terms of n:
2 3 6 30 75 81 115 123 249 362 384 462
</pre>
 
 
=={{header|Scala}}==
{{trans|Java}}
<syntaxhighlight lang="Scala">
import java.math.BigInteger
import scala.annotation.tailrec
 
object CullenAndWoodhall extends App {
 
val Certainty = 20
var number: BigInteger = _
var power: BigInteger = _
var count: Int = _
var primeIndex: Int = _
 
sealed trait NumberType
case object Cullen extends NumberType
case object Woodhall extends NumberType
 
numberSequence(20, Cullen)
numberSequence(20, Woodhall)
primeSequence(5, Cullen)
primeSequence(12, Woodhall)
 
def numberSequence(aCount: Int, aNumberType: NumberType): Unit = {
println(s"\nThe first $aCount $aNumberType numbers are:")
numberInitialise()
(1 to aCount).foreach { _ =>
print(nextNumber(aNumberType).toString + " ")
}
println()
}
 
 
def primeSequence(aCount: Int, aNumberType: NumberType): Unit = {
println(s"\nThe indexes of the first $aCount $aNumberType primes are:")
primeInitialise()
 
@tailrec
def findPrimes(): Unit = {
if (count < aCount) {
if (nextNumber(aNumberType).isProbablePrime(Certainty)) {
print(primeIndex + " ")
count += 1
}
primeIndex += 1
findPrimes()
}
}
 
findPrimes()
println()
}
 
def nextNumber(aNumberType: NumberType): BigInteger = {
number = number.add(BigInteger.ONE)
power = power.shiftLeft(1)
aNumberType match {
case Cullen => number.multiply(power).add(BigInteger.ONE)
case Woodhall => number.multiply(power).subtract(BigInteger.ONE)
}
}
 
def numberInitialise(): Unit = {
number = BigInteger.ZERO
power = BigInteger.ONE
}
 
def primeInitialise(): Unit = {
count = 0
primeIndex = 1
numberInitialise()
}
}
</syntaxhighlight>
{{out}}
<pre>
 
The first 20 Cullen numbers are:
3 9 25 65 161 385 897 2049 4609 10241 22529 49153 106497 229377 491521 1048577 2228225 4718593 9961473 20971521
 
The first 20 Woodhall numbers are:
1 7 23 63 159 383 895 2047 4607 10239 22527 49151 106495 229375 491519 1048575 2228223 4718591 9961471 20971519
 
The indexes of the first 5 Cullen primes are:
1 141 4713 5794 6611
 
The indexes of the first 12 Woodhall primes are:
2 3 6 30 75 81 115 123 249 362 384 462
</pre>
 
337

edits