Perfect numbers: Difference between revisions

no edit summary
No edit summary
Line 2,886:
return (sum=n);
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}}==
211

edits