Perfect numbers: Difference between revisions

Content added Content deleted
No edit summary
Line 2,886: Line 2,886:
return (sum=n);
return (sum=n);
end perfect;</lang>
end perfect;</lang>

==={{header|PL/I-80}}===
<lang PL/I>perfect_search: procedure options (main);

%replace
search_limit by 10000,
true by '1'b,
false by '0'b;

dcl (k, found) fixed bin;

put skip list ('Searching for perfect numbers up to ');
put edit (search_limit) (f(5));
found = 0;
do k = 2 to search_limit;
if isperfect(k) then
do;
put skip list(k);
found = found + 1;
end;
end;
put skip list (found, ' perfect numbers were found');

/* return true if n is perfect, otherwise false */
isperfect: procedure(n) returns (bit(1));
dcl (n, sum, f1, f2) fixed bin;

sum = 1; /* 1 is a proper divisor of every number */
f1 = 2;
do while ((f1 * f1) < n);
if mod(n, f1) = 0 then
do;
sum = sum + f1;
f2 = n / f1;
/* don't double count identical co-factors! */
if f2 > f1 then sum = sum + f2;
end;
f1 = f1 + 1;
end;
return (sum = n);
end isperfect;

end perfect_search;</lang>

{{out}}
<pre>
Searching for perfect numbers up to 10000
6
28
496
8128
4 perfect numbers were found
</pre>


=={{header|PowerShell}}==
=={{header|PowerShell}}==