$ 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;