-module(mersenne).
-export([run/1,mersenne/1,lucasLehmer_sequence/2]).
lucasLehmer_sequence (0, M) -> 4 rem M;
lucasLehmer_sequence (N, M) when N>0 ->
erlang:round((math:pow(lucasLehmer_sequence(N-1,M),2)-2)) rem M.
mersenne(N) when N>0 ->
erlang:round(math:pow(2,N))-1.
lucasLehmer_test(N) ->
lucasLehmer_sequence(N - 2, mersenne(N)) =:=0.
run(2) ->
case lucasLehmer_test(2) of
true ->
io:format("M(~w) => ~w~n", [2,mersenne(2)]);
false ->
1+1
end;
run(N) ->
case lucasLehmer_test(N) of
true ->
io:format("M(~w) => ~w~n", [N,mersenne(N)]);
false ->
1+1
end,
run(N-1).