30 lines
728 B
Plaintext
30 lines
728 B
Plaintext
$ include "seed7_05.s7i";
|
|
include "rational.s7i";
|
|
|
|
const func boolean: isPerfect (in integer: candidate) is func
|
|
result
|
|
var boolean: isPerfect is FALSE;
|
|
local
|
|
var integer: divisor is 0;
|
|
var rational: sum is rational.value;
|
|
begin
|
|
sum := 1 / candidate;
|
|
for divisor range 2 to sqrt(candidate) do
|
|
if candidate mod divisor = 0 then
|
|
sum +:= 1 / divisor + 1 / (candidate div divisor);
|
|
end if;
|
|
end for;
|
|
isPerfect := sum = rat(1);
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
var integer: candidate is 0;
|
|
begin
|
|
for candidate range 2 to 2 ** 19 - 1 do
|
|
if isPerfect(candidate) then
|
|
writeln(candidate <& " is perfect");
|
|
end if;
|
|
end for;
|
|
end func;
|