Lucas-Lehmer test: Difference between revisions

→‎{{header|F Sharp|F#}}: added version based on folding
(→‎{{header|F Sharp|F#}}: added tail-recursive version to show how to write recursive loops)
(→‎{{header|F Sharp|F#}}: added version based on folding)
Line 518:
LucasLehmer 0 4I = 0I
</lang>
 
Version using library folding function (way shorter and faster than the above):
<lang fsharp>let IsMersennePrime exponent =
if exponent <= 1 then failwith "Exponent must be >= 2"
let prime = 2I ** exponent - 1I;
 
let LucasLehmer =
[| 1 .. exponent-2 |] |> Array.fold (fun acc _ -> (acc*acc - 2I) % prime) 4I
LucasLehmer = 0I
</lang>
 
Anonymous user