How to resolve the algorithm Product of min and max prime factors step by step in the PL/M programming language

Published on 12 May 2024 09:40 PM

How to resolve the algorithm Product of min and max prime factors step by step in the PL/M programming language

Table of Contents

Problem Statement

Exactly as the task title implies.

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Product of min and max prime factors step by step in the PL/M programming language

Source code in the pl/m programming language

100H: /* FIND THE PRODUCT OF THE MIN AND MAX PRIME FACTORS OF SOME NUMBERS   */

   DECLARE FALSE LITERALLY '0', TRUE LITERALLY '0FFH';

   /* CP/M SYSTEM CALL AND I/O ROUTINES                                      */
   BDOS:      PROCEDURE( FN, ARG ); DECLARE FN BYTE, ARG ADDRESS; GOTO 5; END;
   PR$CHAR:   PROCEDURE( C ); DECLARE C BYTE;    CALL BDOS( 2, C );  END;
   PR$STRING: PROCEDURE( S ); DECLARE S ADDRESS; CALL BDOS( 9, S );  END;
   PR$NL:     PROCEDURE;   CALL PR$CHAR( 0DH ); CALL PR$CHAR( 0AH ); END;
   PR$NUMBER: PROCEDURE( N ); /* PRINTS A NUMBER IN THE MINIMUN FIELD WIDTH  */
      DECLARE N ADDRESS;
      DECLARE V ADDRESS, N$STR ( 6 )BYTE, W BYTE;
      V = N;
      W = LAST( N$STR );
      N$STR( W ) = '$';
      N$STR( W := W - 1 ) = '0' + ( V MOD 10 );
      DO WHILE( ( V := V / 10 ) > 0 );
         N$STR( W := W - 1 ) = '0' + ( V MOD 10 );
      END;
      CALL PR$STRING( .N$STR( W ) );
   END PR$NUMBER;
   /* END SYSTEM CALL AND I/O ROUTINES                                       */

   DECLARE MAX$N        LITERALLY '100',   /* MAXIMUM NUMBER TO CONSIDER     */
           MAX$N$PLUS$1 LITERALLY '101';    /* MAX$N + 1 FOR ARRAY BOUNDS    */

   /* SIEVE THE PRIMES TO MAX$N                                              */
   DECLARE PRIME ( MAX$N$PLUS$1 )BYTE;
   DO;
      DECLARE ( I, S ) ADDRESS;
      PRIME( 0 ),  PRIME( 1 ) = FALSE;
      PRIME( 2 ) = TRUE;
      DO I = 3 TO LAST( PRIME ) BY 2; PRIME( I ) = TRUE;  END;
      DO I = 4 TO LAST( PRIME ) BY 2; PRIME( I ) = FALSE; END;
      DO I = 3 TO LAST( PRIME ) / 2 BY 2;
         IF PRIME( I ) THEN DO;
            DO S = I + I TO LAST( PRIME ) BY I; PRIME( S ) = FALSE; END;
         END;
      END;
   END;

   /* CONSTRUCT TABLES OF THE MINIMUM AND MAXIMUM PRIME FACTORS OF NUMBERS   */
   /* UP TO MAX$N                                                            */
   DECLARE ( MIN$PF, MAX$PF ) ( MAX$N$PLUS$1 )ADDRESS;
   DECLARE ( I, J ) BYTE;
   DECLARE PRODUCT  ADDRESS;

   DO I = 1 TO LAST( MIN$PF );
      MIN$PF( I ), MAX$PF( I ) = 0;
   END;
   MIN$PF( 1 ) = 1;
   MAX$PF( 1 ) = 1;
   DO I = 1 TO MAX$N;
      IF PRIME( I ) THEN DO;
         DO J = I TO MAX$N BY I;
            IF MIN$PF( J ) = 0 THEN MIN$PF( J ) = I;
            MAX$PF( J ) = I;
         END;
      END;
   END;
   /* PRINT THE PRODUCTS OF THE MIN AND MAX PRIME FACTORS                    */
   DO I = 1 TO MAX$N;
      PRODUCT = MIN$PF( I ) * MAX$PF( I );
      IF PRODUCT <   10 THEN CALL PR$CHAR( ' ' );
      IF PRODUCT <  100 THEN CALL PR$CHAR( ' ' );
      IF PRODUCT < 1000 THEN CALL PR$CHAR( ' ' );
      CALL PR$CHAR( ' ' );
      CALL PR$NUMBER( PRODUCT );
      IF I MOD 10 = 0 THEN CALL PR$NL;
   END;

EOF

  

You may also check:How to resolve the algorithm SEDOLs step by step in the Clojure programming language
You may also check:How to resolve the algorithm Number names step by step in the XPL0 programming language
You may also check:How to resolve the algorithm 100 doors step by step in the Rust programming language
You may also check:How to resolve the algorithm Compare a list of strings step by step in the XProfan programming language
You may also check:How to resolve the algorithm Conditional structures step by step in the UNIX Shell programming language