Lucas-Lehmer Test:

for 



p


{\displaystyle p}

 an odd prime, the Mersenne number 




2

p


−
1


{\displaystyle 2^{p}-1}

 is prime if and only if 




2

p


−
1


{\displaystyle 2^{p}-1}

 divides 



S
(
p
−
1
)


{\displaystyle S(p-1)}

 where 



S
(
n
+
1
)
=
(
S
(
n
)

)

2


−
2


{\displaystyle S(n+1)=(S(n))^{2}-2}

, and 



S
(
1
)
=
4


{\displaystyle S(1)=4}

.



Task

Calculate all Mersenne primes up to the implementation's
maximum precision, or the 47th Mersenne prime   (whichever comes first).




val .isPrime = f .i == 2 or
    .i > 2 and not any f(.x) .i div .x, pseries 2 to .i ^/ 2
 
val .isMersennePrime = f(.p) {
    if .p == 2: return true
    if not .isPrime(.p): return false
 
    val .mp = 2 ^ .p - 1
    for[.s=4] of 3 to .p {
        .s = (.s ^ 2 - 2) rem .mp
    } == 0
}
 
writeln join " ", map f $"M\.x;", where .isMersennePrime, series 2300