aboutsummaryrefslogtreecommitdiff
path: root/problem21.erl
diff options
context:
space:
mode:
authorNathan Lasseter <nathan.je.lasseter@googlemail.com>2009-10-04 00:56:56 +0100
committerNathan Lasseter <nathan.je.lasseter@googlemail.com>2009-10-04 00:56:56 +0100
commit0248ed34ce3d05228bc5084669c3a27933be0c2e (patch)
treeb9c4990344b0863a2af851b5917c49f3a5f03e6b /problem21.erl
parent00686037d57eb0a0d5eba6eeb6fcc9692e8b59f6 (diff)
first commit
Diffstat (limited to 'problem21.erl')
-rw-r--r--problem21.erl26
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.