Largest prime factor: Difference between revisions

Erlang version
(Elixir version)
(Erlang version)
Line 240:
The largest prime factor of 600,851,475,143 is 6857
</pre>
=={{header|Erlang}}==
Uses a factorization wheel, but without builtin lazy lists, it's rather awkward for a functional language.
<lang Erlang>
main(_) ->
test(),
io:format("The largest prime factor of 600,851,475,143 is ~w~n", [gpf(600851475143)]).
 
gpf(N) when N band 1 =:= 0 ->
K = N bsr 1,
if K =:= 1 -> 2; true -> gpf(K) end;
 
gpf(N) when N rem 3 =:= 0 ->
K = N div 3,
if K =:= 1 -> 3; true -> gpf(K) end;
 
gpf(N) when N rem 5 =:= 0 ->
K = N div 5,
if K =:= 1 -> 5; true -> gpf(K) end;
 
gpf(N) -> gpf(N, 7, 0, <<4, 2, 4, 2, 4, 6, 2, 6>>).
gpf(N, D, J, Wheel) when J =:= byte_size(Wheel) -> gpf(N, D, 0, Wheel);
gpf(N, D, _, _) when D*D > N -> N;
gpf(N, D, J, Wheel) when N rem D =:= 0 -> gpf(N div D, D, J, Wheel);
gpf(N, D, J, Wheel) -> gpf(N, D + binary:at(Wheel, J), J + 1, Wheel).
 
test() ->
3 = gpf(27),
5 = gpf(125),
7 = gpf(98),
101 = gpf(101),
23 = gpf(23 * 13).
</lang>
{{Out}}
<pre>
The largest prime factor of 600,851,475,143 is 6857
</pre>
 
=={{header|F_Sharp|F#}}==
<lang fsharp>
357

edits