-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexo10.erl
23 lines (18 loc) · 920 Bytes
/
exo10.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-module(exo10).
-compile(export_all).
-import(exo7, [is_prime/2]).
exo10() -> lists:sum(eratosthene_sieve(2000000)).
eratosthene_sieve(Max) -> eratosthene_sieve(Max, [], lists:seq(2,Max)).
clean_multiples(_, [], CleanedList) -> lists:reverse(CleanedList);
clean_multiples(Number, [Current|ListNumbers], CleanedList) ->
case Current rem Number of
0 -> clean_multiples(Number, ListNumbers, CleanedList);
_ -> clean_multiples(Number, ListNumbers, [Current|CleanedList])
end.
eratosthene_sieve(_, ListPrimes, []) ->
lists:reverse(ListPrimes);
eratosthene_sieve(Max, ListPrimes, [Number|ListNumbers]) when Number*Number > Max ->
lists:append(ListPrimes, [Number|ListNumbers]);
eratosthene_sieve(Max, ListPrimes, [Number|ListNumbers]) ->
io:fwrite(integer_to_list(length(ListNumbers))++"~n"),
eratosthene_sieve(Max, [Number|ListPrimes], clean_multiples(Number, ListNumbers, [])).