diff options
author | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2009-10-04 00:56:56 +0100 |
---|---|---|
committer | Nathan Lasseter <nathan.je.lasseter@googlemail.com> | 2009-10-04 00:56:56 +0100 |
commit | 0248ed34ce3d05228bc5084669c3a27933be0c2e (patch) | |
tree | b9c4990344b0863a2af851b5917c49f3a5f03e6b /problem35.erl | |
parent | 00686037d57eb0a0d5eba6eeb6fcc9692e8b59f6 (diff) |
first commit
Diffstat (limited to 'problem35.erl')
-rwxr-xr-x | problem35.erl | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/problem35.erl b/problem35.erl new file mode 100755 index 0000000..4944ec4 --- /dev/null +++ b/problem35.erl @@ -0,0 +1,49 @@ +-module(problem35). +-export([solve/0]). + +solve() -> + Primes = gen_list([3,2],1000000), + length(lists:map(fun(X) -> allin(rot(X, []), Primes) end, Primes)). + +gen_list(List,Max) -> + O = gen_next(List), + if + O > Max -> + List; + true -> + gen_list([O|List],Max) + end. + +gen_next(List) -> + gen_next(List, lists:max(List) + 1). +gen_next(List, Next) -> + Q = will_divide(Next, List), + if + Q -> + gen_next(List, Next + 1); + true -> + Next + end. + +will_divide(_, []) -> + false; +will_divide(Num, [H|T]) -> + if + Num rem H =:= 0 -> + true; + true -> + will_divide(Num, T) + end. + +rot(Num, [Num|T]) -> + [Num|T]; +rot(Num, []) -> + [A|B] = integer_to_list(Num), + rot(Num, [list_to_integer(B++[A])]); +rot(Num, [H|T]) -> + [A|B] = integer_to_list(H), + rot(Num, [list_to_integer(B++[A]),H|T]). + +allin(L1, L2) -> + L3 = lists:map(fun(X) -> lists:member(X, L2) end, L1), + lists:foldl(fun(X, ASF) -> X and ASF end, true, L3). |