Mersenne primes: Difference between revisions

Content added Content deleted
(→‎{{header|Scala}}: migrate to Scala 2.13)
Line 1,064: Line 1,064:


=={{header|Scala}}==
=={{header|Scala}}==
<lang Scala>object MersennePrimes extends App {
<lang Scala>
object MersennePrimes extends App {
import Stream._

def primeSieve(s: Stream[Int]): Stream[Int] =
val primes = primeSieve(LazyList.from(2))
s.head #:: primeSieve(s.tail filter { _ % s.head != 0 })
val primes = primeSieve(from(2))
def mersenne(p: Int): BigInt = (BigInt(2) pow p) - 1
def s(mp: BigInt, p: Int): BigInt = { if (p == 1) 4 else ((s(mp, p - 1) pow 2) - 2) % mp }
val upbPrime = 9941
val upbPrime = 9941

def primeSieve(s: LazyList[Int]): LazyList[Int] =
s.head #:: primeSieve(s.tail filter {
_ % s.head != 0
})

def mersenne(p: Int): BigInt = (BigInt(2) pow p) - 1

def s(mp: BigInt, p: Int): BigInt = {
if (p == 1) 4 else ((s(mp, p - 1) pow 2) - 2) % mp
}
println(s"Finding Mersenne primes in M[2..$upbPrime]")
println(s"Finding Mersenne primes in M[2..$upbPrime]")
((primes takeWhile (_ <= upbPrime)).par map { p => (p, mersenne(p)) }
((primes takeWhile (_ <= upbPrime)).map { p => (p, mersenne(p)) }
map { p => if (p._1 == 2) (p, 0) else (p, s(p._2, p._1 - 1)) } filter { _._2 == 0 })
map { p => if (p._1 == 2) (p, 0) else (p, s(p._2, p._1 - 1)) } filter {
_._2 == 0
})
.foreach { p =>
.foreach { p =>
println(s"prime M${(p._1)._1}: " +
println(s"prime M${(p._1)._1}: " + {
{ if ((p._1)._1 < 200) (p._1)._2 else s"(${(p._1)._2.toString.size} digits)" })
if ((p._1)._1 < 200) (p._1)._2 else s"(${(p._1)._2.toString.length} digits)"
})
}
}
println("That's All Folks!")
println("That's All Folks!")
}
}</lang>
</lang>

=={{header|Sidef}}==
=={{header|Sidef}}==
Uses the ''is_mersenne_prime()'' function from [https://metacpan.org/pod/Math::Prime::Util::GMP Math::Prime::Util::GMP].
Uses the ''is_mersenne_prime()'' function from [https://metacpan.org/pod/Math::Prime::Util::GMP Math::Prime::Util::GMP].