aboutsummaryrefslogtreecommitdiff
path: root/problem41.erl
blob: b221d369a0056e3177c6e36e61a522a9957ff84a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-module(problem41).
-export([solve/0]).

solve() ->
	Pan = gen_perms(),
	Pri = gen_primes([2,3]),
	lists:max([X || X <- Pan, lists:member(X, Pri)]).

gen_perms() -> [list_to_integer(X) || X <- perms("123456789")].

perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].

gen_primes(L) ->
	if
		hd(L) > 987654321 ->
			tl(L);
		true ->
			gen_primes(gen_next(L))
	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|List]
	end.

will_divide(_, []) ->
	false;
will_divide(Num, [H|T]) ->
	if
		Num rem H =:= 0 ->
			true;
		true ->
			will_divide(Num, T)
	end.