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}}== |