16 lines
692 B
Erlang
16 lines
692 B
Erlang
main(_) ->
|
|
AddPrimes = [N || N <- lists:seq(2,500), isprime(N) andalso isprime(digitsum(N))],
|
|
io:format("The additive primes up to 500 are:~n~p~n~n", [AddPrimes]),
|
|
io:format("There are ~b of them.~n", [length(AddPrimes)]).
|
|
|
|
isprime(N) when N < 2 -> false;
|
|
isprime(N) -> isprime(N, 2, 0, <<1, 2, 2, 4, 2, 4, 2, 4, 6, 2, 6>>).
|
|
|
|
isprime(N, D, J, Wheel) when J =:= byte_size(Wheel) -> isprime(N, D, 3, Wheel);
|
|
isprime(N, D, _, _) when D*D > N -> true;
|
|
isprime(N, D, _, _) when N rem D =:= 0 -> false;
|
|
isprime(N, D, J, Wheel) -> isprime(N, D + binary:at(Wheel, J), J + 1, Wheel).
|
|
|
|
digitsum(N) -> digitsum(N, 0).
|
|
digitsum(0, S) -> S;
|
|
digitsum(N, S) -> digitsum(N div 10, S + N rem 10).
|