These define three classifications of positive integers based on their   proper divisors.

Let   P(n)   be the sum of the proper divisors of   n   where the proper divisors are all positive divisors of   n   other than   n   itself.

   if    P(n) <  n    then  n  is classed as  deficient  (OEIS A005100).
   if    P(n) == n    then  n  is classed as  perfect    (OEIS A000396).
   if    P(n) >  n    then  n  is classed as  abundant   (OEIS A005101).



Example

6   has proper divisors of   1,   2,   and   3.

1 + 2 + 3 = 6,   so   6   is classed as a perfect number.



Task

Calculate how many of the integers   1   to   20,000   (inclusive) are in each of the three classes.

Show the results here.



Related tasks

   Aliquot sequence classifications.   (The whole series from which this task is a subset.)
   Proper divisors
   Amicable pairs


 
-module(properdivs).
-export([divs/1,sumdivs/1,class/1]).
 
divs(0) -> [];
divs(1) -> [];
divs(N) -> lists:sort(divisors(1,N)).
 
divisors(1,N) -> 
      divisors(2,N,math:sqrt(N),[1]).
 
divisors(K,_N,Q,L) when K > Q -> L;
divisors(K,N,_Q,L) when N rem K =/= 0 -> 
    divisors(K+1,N,_Q,L);
divisors(K,N,_Q,L) when K * K  =:= N -> 
    divisors(K+1,N,_Q,[K|L]);
divisors(K,N,_Q,L) ->
    divisors(K+1,N,_Q,[N div K, K|L]).
 
sumdivs(N) -> lists:sum(divs(N)).
 
class(Limit) -> class(0,0,0,sumdivs(2),2,Limit).
 
class(D,P,A,_Sum,Acc,L) when Acc > L +1-> 
    io:format("Deficient: ~w, Perfect: ~w, Abundant: ~w~n", [D,P,A]);
 
class(D,P,A,Sum,Acc,L) when Acc < Sum ->                 
       class(D,P,A+1,sumdivs(Acc+1),Acc+1,L);      
class(D,P,A,Sum,Acc,L) when Acc == Sum ->                
       class(D,P+1,A,sumdivs(Acc+1),Acc+1,L);      
class(D,P,A,Sum,Acc,L) when Acc > Sum  ->                
       class(D+1,P,A,sumdivs(Acc+1),Acc+1,L).      
 