RosettaCodeData/Task/Tau-function/Modula-2/tau-function.mod2

34 lines
655 B
Plaintext

MODULE TauFunc;
FROM InOut IMPORT WriteCard, WriteLn;
VAR i: CARDINAL;
PROCEDURE tau(n: CARDINAL): CARDINAL;
VAR total, count, p: CARDINAL;
BEGIN
total := 1;
WHILE n MOD 2 = 0 DO
n := n DIV 2;
total := total + 1
END;
p := 3;
WHILE p*p <= n DO
count := 1;
WHILE n MOD p = 0 DO
n := n DIV p;
count := count + 1
END;
total := total * count;
p := p + 2
END;
IF n>1 THEN total := total * 2 END;
RETURN total;
END tau;
BEGIN
FOR i := 1 TO 100 DO
WriteCard(tau(i), 3);
IF i MOD 20 = 0 THEN WriteLn END
END
END TauFunc.