Factors of a Mersenne number: Difference between revisions
→{{header|Scala}}: migrate to Scala 2.13
(→{{header|Scala}}: migrate to Scala 2.13) |
|||
Line 2,528:
===Full-blown version===
<lang Scala>
/** Find factors of a Mersenne number
*
*
*
*
*
*/
object
val two: BigInt = 2
Stream.cons(nums.head, sieve((nums.tail) filter (_ % nums.head != 0)))▼
// An infinite stream of primes, lazy evaluation and memo-ized
val oddPrimes = sieve(
def primes = sieve(2 #:: oddPrimes)▼
def
▲ def primes: LazyList[Int] = sieve(2 #:: oddPrimes)
def factorMersenne(p: Int): Option[Long] = {
Line 2,555:
// Build a stream of factors from (2*p+1) step-by (2*p)
def s(a: Long):
// Limit and Filter Stream and then take the head element
Line 2,561:
e.headOption
}
def mersenne(p: Int): BigInt = (two pow p) - 1
// Test
(primes takeWhile (_ <= 97)) ++ List(929, 937) foreach { p => { // Needs some intermediate results for nice formatting
val nMersenne = mersenne(p);
}
def sPrime: String = {
println(f"$preAmble${sPrime} ${f"($mSec%,1d"}%13s msec)")▼
if (
println(f"${decStr}%-17s = ${result.get} × ${nMersenne / result.get}")▼
}
if (result.isDefined)
}
}
}
{{out}}
<pre style="height:40ex;overflow:scroll"> M2 = 2^002 - 1 = 3 is a Mersenne prime number. (63 msec)
|