44 lines
654 B
Plaintext
44 lines
654 B
Plaintext
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.
|