diff options
Diffstat (limited to 'problem21.erl')
-rw-r--r-- | problem21.erl | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/problem21.erl b/problem21.erl new file mode 100644 index 0000000..1661801 --- /dev/null +++ b/problem21.erl @@ -0,0 +1,26 @@ +-module(problem21). +-export([solve/0]). + +solve() -> + L = test(1, []), + pairs(L, 0). + +test(10000, L) -> + L; +test(A,L) -> + D = [X || X <- lists:seq(1, erlang:trunc(math:sqrt(A))), (A rem X) =:= 0], + E = [A div Y || Y <- D], + F = sets:to_list(sets:from_list((D ++ E) -- [A])), + G = lists:sum(F), + test(A+1, [{A,G}|L]). + +pairs([_], S) -> + S; +pairs([{A,B}|T], S) -> + M = lists:member({B, A}, T), + if + M -> + pairs(T, S+A+B); + true -> + pairs(T, S) + end. |