Duffinian numbers: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (add Modula-2) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 1,603: | Line 1,603: | ||
[166463,166464,166465] [167041,167042,167043] |
[166463,166464,166465] [167041,167042,167043] |
||
</pre> |
</pre> |
||
=={{header|PL/M}}== |
|||
<syntaxhighlight lang="plm">100H: |
|||
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; |
|||
PRINT: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PRINT; |
|||
PR$NUM: PROCEDURE (N, WIDTH); |
|||
DECLARE N ADDRESS, WIDTH BYTE; |
|||
DECLARE S (6) BYTE INITIAL ('.....$'); |
|||
DECLARE P ADDRESS, DG BASED P BYTE; |
|||
P = .S(5); |
|||
DIGIT: |
|||
P = P - 1; |
|||
DG = '0' + N MOD 10; |
|||
IF WIDTH > 0 THEN WIDTH = WIDTH - 1; |
|||
IF (N := N / 10) > 0 THEN GO TO DIGIT; |
|||
CALL PRINT(P); |
|||
DO WHILE WIDTH > 0; |
|||
CALL PR$CHAR(' '); |
|||
WIDTH = WIDTH - 1; |
|||
END; |
|||
END PR$NUM; |
|||
DECLARE MAX$SIGMA LITERALLY '10$001'; |
|||
DECLARE SIGMA (MAX$SIGMA) ADDRESS; |
|||
CALC$SIGMA: PROCEDURE; |
|||
DECLARE (I, J) ADDRESS; |
|||
DO I = 1 TO MAX$SIGMA-1; |
|||
SIGMA(I) = 0; |
|||
END; |
|||
DO I = 1 TO MAX$SIGMA-1; |
|||
DO J = I TO MAX$SIGMA-1 BY I; |
|||
SIGMA(J) = SIGMA(J) + I; |
|||
END; |
|||
END; |
|||
END CALC$SIGMA; |
|||
GCD: PROCEDURE (X, Y) ADDRESS; |
|||
DECLARE (X, Y, Z) ADDRESS; |
|||
DO WHILE Y > 0; |
|||
Z = X MOD Y; |
|||
X = Y; |
|||
Y = Z; |
|||
END; |
|||
RETURN X; |
|||
END GCD; |
|||
DUFF: PROCEDURE (N) BYTE; |
|||
DECLARE N ADDRESS; |
|||
RETURN SIGMA(N) > N+1 AND GCD(N, SIGMA(N)) = 1; |
|||
END DUFF; |
|||
DUFF$TRIPLE: PROCEDURE (N) BYTE; |
|||
DECLARE N ADDRESS; |
|||
RETURN DUFF(N) AND DUFF(N+1) AND DUFF(N+2); |
|||
END DUFF$TRIPLE; |
|||
DECLARE N ADDRESS, I BYTE; |
|||
CALL CALC$SIGMA; |
|||
CALL PRINT(.('FIRST 50 DUFFINIAN NUMBERS:',13,10,'$')); |
|||
N = 0; |
|||
DO I = 1 TO 50; |
|||
DO WHILE NOT DUFF(N := N+1); END; |
|||
CALL PR$NUM(N, 4); |
|||
IF I MOD 10 = 0 THEN CALL PRINT(.(13,10,'$')); |
|||
END; |
|||
CALL PRINT(.(13,10,'FIRST 15 DUFFINIAN TRIPLES:',13,10,'$')); |
|||
N = 0; |
|||
DO I = 1 TO 15; |
|||
DO WHILE NOT DUFF$TRIPLE(N := N+1); END; |
|||
CALL PR$NUM(N, 6); |
|||
CALL PR$NUM(N+1, 6); |
|||
CALL PR$NUM(N+2, 6); |
|||
CALL PRINT(.(13,10,'$')); |
|||
END; |
|||
CALL EXIT; |
|||
EOF</syntaxhighlight> |
|||
{{out}} |
|||
<pre>FIRST 50 DUFFINIAN NUMBERS: |
|||
4 8 9 16 21 25 27 32 35 36 |
|||
39 49 50 55 57 63 64 65 75 77 |
|||
81 85 93 98 100 111 115 119 121 125 |
|||
128 129 133 143 144 155 161 169 171 175 |
|||
183 185 187 189 201 203 205 209 215 217 |
|||
FIRST 15 DUFFINIAN TRIPLES: |
|||
63 64 65 |
|||
323 324 325 |
|||
511 512 513 |
|||
721 722 723 |
|||
899 900 901 |
|||
1443 1444 1445 |
|||
2303 2304 2305 |
|||
2449 2450 2451 |
|||
3599 3600 3601 |
|||
3871 3872 3873 |
|||
5183 5184 5185 |
|||
5617 5618 5619 |
|||
6049 6050 6051 |
|||
6399 6400 6401 |
|||
8449 8450 8451</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
||
<syntaxhighlight lang="python"> |
<syntaxhighlight lang="python"> |
||
Line 1,636: | Line 1,742: | ||
j+=1 |
j+=1 |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
=={{header|Quackery}}== |
=={{header|Quackery}}== |
||