Talk:Sieve of Eratosthenes: Difference between revisions
Content added Content deleted
(→Pari/GP script: new section) |
|||
Line 287: | Line 287: | ||
Problem found by user Poetaster . I just moved the report here. --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 06:53, 19 September 2015 (UTC) |
Problem found by user Poetaster . I just moved the report here. --[[User:Paddy3118|Paddy3118]] ([[User talk:Paddy3118|talk]]) 06:53, 19 September 2015 (UTC) |
||
corrected version: |
|||
<lang Erlang> |
|||
-module( sieve_of_eratoshenes ). |
|||
-export( [primes_upto/1] ). |
|||
primes_upto( N ) -> |
|||
Ns = lists:seq( 2, N ), |
|||
Dict = dict:from_list( [{X, potential_prime} || X <- Ns] ), |
|||
{Upto_sqrt_ns, _T} = lists:split( erlang:round(math:sqrt(N)), Ns ), |
|||
{N, Prime_dict} = lists:foldl( fun find_prime/2, {N, Dict}, Upto_sqrt_ns ), |
|||
lists:sort( dict:fetch_keys(Prime_dict) ). |
|||
find_prime( N, {Max, Dict} ) -> find_prime( dict:find(N, Dict), N, {Max, Dict} ). |
|||
find_prime( error, _N, Acc ) -> Acc; |
|||
find_prime( {ok, _Value}, N, {Max, Dict} ) when Max > N*N -> |
|||
{Max, lists:foldl( fun dict:erase/2, Dict, lists:seq(N*N, Max, N))}; |
|||
find_prime( {ok, _Value}, _, R) -> R. |
|||
</lang> |
|||
== R code error == |
== R code error == |