Tau function: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (Add PL/I) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 1,330: | Line 1,330: | ||
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre> |
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre> |
||
=={{header|PL/M}}== |
|||
{{trans|C}} |
|||
<lang plm>100H: |
|||
/* CP/M BDOS FUNCTIONS */ |
|||
BDOS: PROCEDURE(F,A); DECLARE F BYTE, A ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; GO TO 0; END EXIT; |
|||
PR$CHAR: PROCEDURE(C); DECLARE C BYTE; CALL BDOS(2,C); END PR$CHAR; |
|||
PR$STR: PROCEDURE(S); DECLARE S ADDRESS; CALL BDOS(9,S); END PR$STR; |
|||
/* PRINT BYTE IN A 3-CHAR COLUMN */ |
|||
PRINT3: PROCEDURE(N); |
|||
DECLARE (N, M) BYTE; |
|||
M = 100; |
|||
DO WHILE M>0; |
|||
IF N>=M |
|||
THEN CALL PR$CHAR('0' + (N/M) MOD 10); |
|||
ELSE CALL PR$CHAR(' '); |
|||
M = M/10; |
|||
END; |
|||
END PRINT3; |
|||
/* TAU FUNCTION */ |
|||
TAU: PROCEDURE(N) BYTE; |
|||
DECLARE (N, TOTAL, COUNT, P) BYTE; |
|||
TOTAL = 1; |
|||
DO WHILE NOT N; |
|||
N = SHR(N,1); |
|||
TOTAL = TOTAL + 1; |
|||
END; |
|||
P = 3; |
|||
DO WHILE P*P <= N; |
|||
COUNT = 1; |
|||
DO WHILE N MOD P = 0; |
|||
COUNT = COUNT + 1; |
|||
N = N / P; |
|||
END; |
|||
TOTAL = TOTAL * COUNT; |
|||
P = P + 2; |
|||
END; |
|||
IF N>1 THEN TOTAL = SHL(TOTAL, 1); |
|||
RETURN TOTAL; |
|||
END TAU; |
|||
/* PRINT TAU 1..100 */ |
|||
DECLARE N BYTE; |
|||
DO N=1 TO 100; |
|||
CALL PRINT3(TAU(N)); |
|||
IF N MOD 20=0 THEN CALL PR$STR(.(13,10,'$')); |
|||
END; |
|||
CALL EXIT; |
|||
EOF</lang> |
|||
{{out}} |
|||
<pre> 1 2 2 3 2 4 2 4 3 4 2 6 2 4 4 5 2 6 2 6 |
|||
4 4 2 8 3 4 4 6 2 8 2 6 4 4 4 9 2 4 4 8 |
|||
2 8 2 6 6 4 2 10 3 6 4 6 2 8 4 8 4 4 2 12 |
|||
2 4 6 7 4 8 2 6 4 8 2 12 2 4 6 6 4 8 2 10 |
|||
5 4 2 12 4 4 4 8 2 12 4 6 4 4 4 12 2 6 6 9</pre> |
|||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |