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).




 
function Get-MersennePrime ([bigint]$Maximum = 4800)
{
    [bigint]$n = [bigint]::One
 
    for ($exp = 2; $exp -lt $Maximum; $exp++)
    { 
        if ($exp -eq 2)
        {
            $s = 0
        }
        else
        {
            $s = 4
        }
 
        $n = ($n + 1) * 2 - 1
 
        for ($i = 1; $i -le $exp - 2; $i++)
        { 
            $s = ($s * $s - 2) % $n
        }
 
        if ($s -eq 0)
        {
            $exp
        }
    }
}
 