Primes by Trial Division - PL/I

23 April 2017
 NPRIMES:   PROCEDURE (N) OPTIONS (MAIN NOEXECOPS);
            DECLARE N CHARACTER VARYING;
            CALL CALCULATE (N);
 CALCULATE: PROCEDURE (N);
            DECLARE I DECIMAL FIXED (5),
                    FOUND DECIMAL FIXED (5),
                    COUNT DECIMAL FIXED (6),
                    PRIMES (N) DECIMAL FIXED (6);
            FOUND = 0;
            COUNT = 2;
            DO WHILE (FOUND < N);
                FOUND = FOUND + 1;
                PUT SKIP LIST (COUNT);
                PRIMES (FOUND) = COUNT;
 NOTPRIME:      COUNT = COUNT + 1;
                I = 1;
 NEXT:          IF (MOD (COUNT, PRIMES (I)) = 0)
                  THEN GO TO NOTPRIME;
                ELSE DO
                  I = I + 1;
                  IF (I <= FOUND)
                    THEN GO TO NEXT;
                  END;
                END;
            END CALCULATE;
        END NPRIMES;