Perfect numbers: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 481: | Line 481: | ||
return Sum = N; |
return Sum = N; |
||
end Is_Perfect;</lang> |
end Is_Perfect;</lang> |
||
=={{header|ALGOL 60}}== |
|||
{{works with|A60}} |
|||
<lang algol60> |
|||
begin |
|||
comment - return p mod q; |
|||
integer procedure mod(p, q); |
|||
value p, q; integer p, q; |
|||
begin |
|||
mod := p - q * entier(p / q); |
|||
end; |
|||
comment - return true if n is perfect, otherwise false; |
|||
boolean procedure isperfect(n); |
|||
value n; integer n; |
|||
begin |
|||
integer sum, f1, f2; |
|||
sum := 1; |
|||
f1 := 2; |
|||
for f1 := f1 while (f1 * f1) < n do |
|||
begin |
|||
if mod(n, f1) = 0 then |
|||
begin |
|||
sum := sum + f1; |
|||
f2 := n / f1; |
|||
if f2 > f1 then sum := sum + f2; |
|||
end; |
|||
f1 := f1 + 1; |
|||
end; |
|||
isperfect := (sum = n); |
|||
end; |
|||
comment - exercise the procedure; |
|||
integer i, found; |
|||
outstring(1,"Searching up to 10000 for perfect numbers\n"); |
|||
found := 0; |
|||
for i := 2 step 1 until 10000 do |
|||
if isperfect(i) then |
|||
begin |
|||
outinteger(1,i); |
|||
found := found + 1; |
|||
end; |
|||
outstring(1,"\n"); |
|||
outinteger(1,found); |
|||
outstring(1,"perfect numbers were found"); |
|||
end |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Searching up to 10000 for perfect numbers |
|||
6 28 496 8128 |
|||
4 perfect numbers were found |
|||
</pre> |
|||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |