Primes by Trial Division - DRI PL/I-86

24 April 2017
DRI PL/I-86 does not allow an array to be declared using a variable, or a non-integer type to be used as an array index.
It will also overflow and hang the machine if COUNT exceeds 32767.
NPRIMES: PROCEDURE OPTIONS (MAIN);
%REPLACE
N BY 100;
/* N BY 1000; */
DECLARE (I, FOUND, COUNT) INT,
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 NPRIMES;