Humble numbers: Difference between revisions
→{{header|PL/M}}: Replaced PLM286 version with one that can be compiled with the original 8080 PL/M compiler
m (→{{header|Phix}}: added syntax colouring the hard way) |
(→{{header|PL/M}}: Replaced PLM286 version with one that can be compiled with the original 8080 PL/M compiler) |
||
Line 4,096:
=={{header|PL/M}}==
This can be compiled with the original 8080 PL/M compiler and run under CP/M or an emulator or clone.
<br>Based on the Algol W sample, only handles Humble numbers with up to 4 digits as 8080 PL/M only has unsigned 8 and 16 bit integers.
<lang plm>100H: /* FIND SOME HUMBLE NUMBERS - NUMBERS WITH NO PRIME FACTORS ABOVE 7 */
BDOS: PROCEDURE( FN, ARG ); /* CP/M BDOS SYSTEM CALL */
DECLARE FN BYTE, ARG ADDRESS;
GOTO 5;
WRITE$STRING: PROCEDURE( S ) EXTERNAL; DECLARE S POINTER; END;▼
▲
PRINT$NL: PROCEDURE; CALL PRINT$STRING( .( 0DH, 0AH, '$' ) ); END;
DECLARE MAX$HUMBLE LITERALLY '400';▼
PRINT$NUMBER: PROCEDURE( N );
DECLARE V ADDRESS,
V = N;
N$STR( W ) = '$';
DO
END PRINT$NUMBER;
CALL WRITE$WORD( D );▼
MIN:
DECLARE
IF A
/* DISPLAY A STASTIC ABOUT HUMBLE NUMBERS */
CALL
IF S < 10 THEN CALL PRINT$CHAR( ' '
IF S < 100 THEN CALL PRINT$CHAR( ' '
CALL PRINT$NUMBER(
CALL PRINT$STRING( .' HUMBLE NUMBERS WITH $' );
CALL
CALL PRINT$STRING( .' DIGIT$' );
H1 = 0; H2 = 0; H3 = 0; H4 = 0; H5 = 0; H6 = 0;▼
IF D
END PRINT$H$STAT;
/* FIND AND PRINT HUMBLE NUMBERS */
DECLARE H( MAX$HUMBLE ) ADDRESS;
DECLARE ( P2, P3, P5,
,
) ADDRESS;
/* 1 IS THE FIRST HUMBLE NUMBER */
H( 0
H1 = 0; H2 = 0; H3
LAST2 = 0; LAST3 = 0; LAST5 = 0;
P2 = 2; P3
DO HPOS = 1 TO MAX$HUMBLE
/* THE NEXT HUMBLE NUMBER IS THE LOWEST OF THE
/* 2, 3, 5, 7
M = MIN( MIN( MIN( P2,
H( HPOS
IF M = P2 THEN P2 = 2 * H(
IF M = P3 THEN P3
IF M = P5 THEN P5
IF M = P7 THEN P7 = 7 * H( LAST7 := LAST7 + 1 );
END;
DO HPOS = 0 TO
CALL PRINT$CHAR(
END;
DO HPOS = 0 TO MAX$HUMBLE -
IF
ELSE IF
END;
CALL WRITEHSTAT( H1, 1 );▼
▲ END MAIN;
{{out}}
<pre>
THERE ARE 9 HUMBLE NUMBERS WITH 1 DIGIT
THERE ARE 36 HUMBLE NUMBERS WITH 2 DIGITS
THERE ARE 95 HUMBLE NUMBERS WITH 3 DIGITS
THERE ARE 197 HUMBLE NUMBERS WITH 4 DIGITS
</pre>
|