42 lines
1,004 B
Text
42 lines
1,004 B
Text
MODULE TauNumbers;
|
|
FROM InOut IMPORT WriteCard, WriteLn;
|
|
|
|
CONST
|
|
MaxNum = 1100; (* enough to generate 100 Tau numbers *)
|
|
NumTau = 100; (* how many Tau numbers to generate *)
|
|
|
|
VAR DivCount: ARRAY [1..MaxNum] OF CARDINAL;
|
|
seen, n: CARDINAL;
|
|
|
|
(* Find the amount of divisors for each number beforehand *)
|
|
PROCEDURE CountDivisors;
|
|
VAR i, j: CARDINAL;
|
|
BEGIN
|
|
FOR i := 1 TO MaxNum DO
|
|
DivCount[i] := 1; (* every number is divisible by 1 *)
|
|
END;
|
|
|
|
FOR i := 2 TO MaxNum DO
|
|
j := i;
|
|
WHILE j <= MaxNum DO (* J is divisible by I *)
|
|
DivCount[j] := DivCount[j] + 1;
|
|
j := j + i; (* next multiple of i *)
|
|
END;
|
|
END;
|
|
END CountDivisors;
|
|
|
|
BEGIN
|
|
CountDivisors();
|
|
n := 1;
|
|
seen := 0;
|
|
WHILE seen < NumTau DO
|
|
IF n MOD DivCount[n] = 0 THEN
|
|
WriteCard(n, 5);
|
|
INC(seen);
|
|
IF seen MOD 10 = 0 THEN
|
|
WriteLn();
|
|
END;
|
|
END;
|
|
INC(n);
|
|
END;
|
|
END TauNumbers.
|