Abundant, deficient and perfect number classifications: Difference between revisions
Content added Content deleted
(→{{header|C sharp}}: added third method to comparison, added performance comparison.) |
Not a robot (talk | contribs) (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}}== |