Jump to content

Factors of an integer: Difference between revisions

Line 887:
<lang erlang>factors(N) ->
[I || I <- lists:seq(1,trunc(N/2)), N rem I == 0]++[N].</lang>
 
=={{header|Erlang Two}}==
Another, less concise, but faster version
<lang erlang>
 
-module(divs).
-export([divs/1]).
 
divs(0) -> [];
divs(1) -> [];
divs(N) -> lists:sort(divisors(1,N))++[N].
 
divisors(1,N) ->
[1] ++ divisors(2,N,math:sqrt(N)).
 
divisors(K,_N,Q) when K > Q -> [];
divisors(K,N,_Q) when N rem K =/= 0 ->
[] ++ divisors(K+1,N,math:sqrt(N));
divisors(K,N,_Q) when K * K == N ->
[K] ++ divisors(K+1,N,math:sqrt(N));
divisors(K,N,_Q) ->
[K, N div K] ++ divisors(K+1,N,math:sqrt(N)).
</lang>
{{out}}
<pre>
58> timer:tc(divs, factors, [20000]).
{2237,
[1,2,4,5,8,10,16,20,25,32,40,50,80,100,125,160,200,250,400,
500,625,800,1000,1250,2000,2500,4000|...]}
59> timer:tc(divs, divs, [20000]).
{106,
[1,2,4,5,8,10,16,20,25,32,40,50,80,100,125,160,200,250,400,
500,625,800,1000,1250,2000,2500,4000|...]}
</pre>
 
The first number is milliseconds. I'v ommitted repeating the first fuction.
 
=={{header|ERRE}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.