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




      *FLOAT 64
      PRINT "Mersenne Primes:"
      FOR p% = 2 TO 23
        IF FNlucas_lehmer(p%) PRINT "M" ; p%
      NEXT
      END
 
      DEF FNlucas_lehmer(p%)
      LOCAL i%, mp, sn
      IF p% = 2 THEN = TRUE
      IF (p% AND 1) = 0 THEN = FALSE
      mp = 2^p% - 1
      sn = 4
      FOR i% = 3 TO p%
        sn = sn^2 - 2
        sn -= (mp * INT(sn / mp))
      NEXT
      = (sn = 0)