MODULE PerfectNumbers; FROM SWholeIO IMPORT WriteCard; FROM STextIO IMPORT WriteLn; FROM RealMath IMPORT sqrt; VAR N: CARDINAL; PROCEDURE IsPerfect(N: CARDINAL): BOOLEAN; VAR S, I: CARDINAL; SqrtN: REAL; BEGIN S := 1; SqrtN := sqrt(FLOAT(N)); IF N REM 2 = 0 THEN S := S + 2 + N / 2; END; I := 3; WHILE FLOAT(I) <= SqrtN - 1.0 DO IF N REM I = 0 THEN S := S + I + N / I; END; I := I + 1; END; IF I * I = N THEN S := S + I; END; RETURN (N = S); END IsPerfect; BEGIN FOR N := 2 TO 10000 BY 2 DO IF IsPerfect(N) THEN WriteCard(N, 5); WriteLn; END; END; END PerfectNumbers.