Abundant, deficient and perfect number classifications: Difference between revisions

Content added Content deleted
(→‎{{header|C sharp}}: added third method to comparison, added performance comparison.)
(Add CLU)
Line 1,928: Line 1,928:
; :abundant 4953,
; :abundant 4953,
; :deficient 15043}</lang>
; :deficient 15043}</lang>

=={{header|CLU}}==
<lang clu>% Generate proper divisors from 1 to max
proper_divisors = proc (max: int) returns (array[int])
divs: array[int] := array[int]$fill(1, max, 0)
for i: int in int$from_to(1, max/2) do
for j: int in int$from_to_by(i*2, max, i) do
divs[j] := divs[j] + i
end
end
return(divs)
end proper_divisors

% Classify all the numbers for which we have divisors
classify = proc (divs: array[int]) returns (int, int, int)
def, per, ab: int
def, per, ab := 0, 0, 0
for i: int in array[int]$indexes(divs) do
if divs[i]<i then def := def + 1
elseif divs[i]=i then per := per + 1
elseif divs[i]>i then ab := ab + 1
end
end
return(def, per, ab)
end classify

% Find amount of deficient, perfect, and abundant numbers up to 20000
start_up = proc ()
max = 20000
po: stream := stream$primary_output()
def, per, ab: int := classify(proper_divisors(max))
stream$putl(po, "Deficient: " || int$unparse(def))
stream$putl(po, "Perfect: " || int$unparse(per))
stream$putl(po, "Abundant: " || int$unparse(ab))
end start_up</lang>
{{out}}
<pre>Deficient: 15043
Perfect: 4
Abundant: 4953</pre>


=={{header|Common Lisp}}==
=={{header|Common Lisp}}==