Mersenne primes: Difference between revisions

Content added Content deleted
(→‎{{header|Wren}}: Replaced existing solution with one which uses BigInt.)
Line 1,400: Line 1,400:
=={{header|Wren}}==
=={{header|Wren}}==
{{libheader|Wren-math}}
{{libheader|Wren-math}}
{{libheader|Wren-big}}
As far as exact integer arithmetic in Wren will allow us to go.
A bit slow so limited to first 14 Mersenne primes.
<lang ecmascript>import "/math" for Int
<lang ecmascript>import "/math" for Int
import "/big" for BigInt


var MAX = 14
System.print("The following Mersenne numbers are prime:")
System.print("The first %(MAX) Mersenne primes are:")
for (i in 1..31) {
var m = (1<<i) - 1
var count = 0
var p = 2
if (Int.isPrime(m)) {
while (true) {
var sp = (i < 10) ? " " : ""
System.print("M(%(i))%(sp) = 2 ^ %(i)%(sp) - 1 = %(m)")
var m = (BigInt.one << p) - 1
if (m.isProbablePrime(10)) {
System.print("2 ^ %(p) - 1")
count = count + 1
if (count == MAX) break
}
while (true) {
p = (p > 2) ? p + 2 : 3
if (Int.isPrime(p)) break
}
}
}</lang>
}</lang>
Line 1,414: Line 1,424:
{{out}}
{{out}}
<pre>
<pre>
The following Mersenne numbers are prime:
The first 14 Mersenne primes are:
M(2) = 2 ^ 2 - 1 = 3
2 ^ 2 - 1
M(3) = 2 ^ 3 - 1 = 7
2 ^ 3 - 1
M(5) = 2 ^ 5 - 1 = 31
2 ^ 5 - 1
M(7) = 2 ^ 7 - 1 = 127
2 ^ 7 - 1
M(13) = 2 ^ 13 - 1 = 8191
2 ^ 13 - 1
M(17) = 2 ^ 17 - 1 = 131071
2 ^ 17 - 1
M(19) = 2 ^ 19 - 1 = 524287
2 ^ 19 - 1
M(31) = 2 ^ 31 - 1 = 2147483647
2 ^ 31 - 1
2 ^ 61 - 1
2 ^ 89 - 1
2 ^ 107 - 1
2 ^ 127 - 1
2 ^ 521 - 1
2 ^ 607 - 1
</pre>
</pre>