Kicsit átváltottam Erlang-ra, mert nincs MD5 számoló library-m.

Nincs agyonoptimalizálva...
Code
-module(main).
-export([main/0, main/1]).
-define(MD5_DIGEST_SIZE,128).
main() ->
start_mine("iwrupvqb").
main([Secret]) ->
start_mine(Secret),
halt(0).
start_mine(Secret) ->
{
start_mine(Secret, 5),
start_mine(Secret, 6)
}.
start_mine(Secret, NumZeroNibbles) ->
process_flag(trap_exit, true),
flush_messages(),
Threads = 8,
Pids = [ spawn_link(fun() -> mine(Secret, NumZeroNibbles, Instance, Threads) end)
|| Instance <- lists:seq(1, Threads)
],
receive
{'EXIT', _, {NumZeroNibbles, M}} -> M
end,
[ exit(Pid, kill) || Pid <- Pids ],
M.
mine(Secret, NumZeroNibbles, N, Step) ->
HeadBits = 4 * NumZeroNibbles,
RestBits = ?MD5_DIGEST_SIZE - HeadBits,
<<Head:HeadBits, _Rest:RestBits/binary-unit:1>> = erlang:md5(Secret ++ integer_to_list(N)),
case Head of
0 ->
io:format("~p~n", [N]),
exit({NumZeroNibbles, N});
_ ->
mine(Secret, NumZeroNibbles, N+Step, Step)
end.
flush_messages() ->
receive
_ -> flush_messages()
after
0 -> ok
end.