61 lines
1.1 KiB
Text
61 lines
1.1 KiB
Text
MODULE AttractiveNumbers;
|
|
FROM InOut IMPORT WriteCard, WriteLn;
|
|
|
|
CONST
|
|
Max = 120;
|
|
|
|
VAR
|
|
n, col: CARDINAL;
|
|
Prime: ARRAY [1..Max] OF BOOLEAN;
|
|
|
|
PROCEDURE Sieve;
|
|
VAR i, j: CARDINAL;
|
|
BEGIN
|
|
Prime[1] := FALSE;
|
|
FOR i := 2 TO Max DO
|
|
Prime[i] := TRUE;
|
|
END;
|
|
|
|
FOR i := 2 TO Max DIV 2 DO
|
|
IF Prime[i] THEN
|
|
j := i*2;
|
|
WHILE j <= Max DO
|
|
Prime[j] := FALSE;
|
|
j := j + i;
|
|
END;
|
|
END;
|
|
END;
|
|
END Sieve;
|
|
|
|
PROCEDURE Factors(n: CARDINAL): CARDINAL;
|
|
VAR i, factors: CARDINAL;
|
|
BEGIN
|
|
factors := 0;
|
|
FOR i := 2 TO Max DO
|
|
IF i > n THEN
|
|
RETURN factors;
|
|
END;
|
|
IF Prime[i] THEN
|
|
WHILE n MOD i = 0 DO
|
|
n := n DIV i;
|
|
factors := factors + 1;
|
|
END;
|
|
END;
|
|
END;
|
|
RETURN factors;
|
|
END Factors;
|
|
|
|
BEGIN
|
|
Sieve();
|
|
col := 0;
|
|
FOR n := 2 TO Max DO
|
|
IF Prime[Factors(n)] THEN
|
|
WriteCard(n, 4);
|
|
col := col + 1;
|
|
IF col MOD 15 = 0 THEN
|
|
WriteLn();
|
|
END;
|
|
END;
|
|
END;
|
|
WriteLn();
|
|
END AttractiveNumbers.
|