вторник, 15 апреля 2014 г.

Project Euler - Problem 5 (Erlang solution)

Решение problem5 на projecteuler

#!/usr/bin/env escript
-export([main/1]).

is_evenly_divisible(Num) ->
    case Num of
        _ when Num rem 20 =/= 0 -> false;
        _ when Num rem 19 =/= 0 -> false;
        _ when Num rem 18 =/= 0 -> false;
        _ when Num rem 17 =/= 0 -> false;
        _ when Num rem 16 =/= 0 -> false;
        _ when Num rem 15 =/= 0 -> false;
        _ when Num rem 14 =/= 0 -> false;
        _ when Num rem 13 =/= 0 -> false;
        _ when Num rem 12 =/= 0 -> false;
        _ when Num rem 11 =/= 0 -> false;
        _ when Num rem 9 =/= 0 -> false;
        _ when Num rem 8 =/= 0 -> false;
        _ when Num rem 7 =/= 0 -> false;
        _ when Num rem 6 =/= 0 -> false;
        _ when Num rem 3 =/= 0 -> false;
        _ -> true
    end.

find_smallest_evenly_divisible(N) ->
    IsED = is_evenly_divisible(N),
    case IsED of
        true -> N;
        false -> find_smallest_evenly_divisible(N+20)
    end.

main(_) ->
    io:fwrite("Running problem005...~n"),
    Res = find_smallest_evenly_divisible(20),
    io:format("Answer: ~w~n", [Res]),
    io:fwrite("Done.~n").

Время на Core i7:
 $> time ./problem005.erl
Running problem005...
Answer: 232792560
Done.

real 1m20.883s
user 1m19.928s
sys 0m0.958s

Комментариев нет:

Отправить комментарий