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


get "libhdr"
manifest $( maximum = 20000 $)
 
let calcpdivs(p, max) be
$(  for i=0 to max do p!i := 0
    for i=1 to max/2
    $(  let j = i+i
        while 0 < j <= max 
        $(  p!j := p!j + i
            j := j + i
        $)
    $)
$)
 
let classify(p, n, def, per, ab) be
$(  let z = 0<=p!n<n -> def, p!n=n -> per, ab
    !z := !z + 1
$)
 
let start() be
$(  let p = getvec(maximum)
    let def, per, ab = 0, 0, 0
 
    calcpdivs(p, maximum)
    for i=1 to maximum do classify(p, i, @def, @per, @ab)
 
    writef("Deficient numbers: %N*N", def)
    writef("Perfect numbers: %N*N", per)
    writef("Abundant numbers: %N*N", ab)
    freevec(p)
$)