'BEGIN' 'COMMENT' CALCULATION OF THE PRIME NUMBERS BETWEEN 2 AND 200 ; 'INTEGER' NN; NN := 200; 'BEGIN' 'COMMENT' FIRST ALGORITHM (CHECK DIVISION IN A LOOP) ; 'BOOLEAN' 'PROCEDURE' ISPRIME (N); 'VALUE' N; 'INTEGER' N; 'BEGIN' 'BOOLEAN' 'PROCEDURE' EVEN (N); 'VALUE' N; 'INTEGER' N; EVEN := ENTIER (N / 2) * 2 = N; 'INTEGER' I; ISPRIME := 'FALSE'; 'IF' EVEN (N) 'AND' N 'NOTEQUAL' 2 'THEN' 'GOTO' RET; 'FOR' I := 3 'STEP' 2 'UNTIL' N 'DIV' 2 'DO' 'IF' ENTIER (N / I) * I = N 'THEN' 'GOTO' RET; ISPRIME := 'TRUE'; RET: 'END'; 'INTEGER' I; VPRINT ("FIRST:"); 'FOR' I := 2 'STEP' 1 'UNTIL' NN 'DO' 'IF' ISPRIME (I) 'THEN' OUTINTEGER (1, I); VPRINT ("\NDONE.") 'END'; 'BEGIN' 'COMMENT' SECOND ALGORITHM (SIEVE) ; 'BOOLEAN' 'ARRAY' ARR [2 : NN]; 'INTEGER' I, J; VPRINT ("SECOND:"); 'FOR' I := 2 'STEP' 1 'UNTIL' NN 'DO' ARR [I] := 'TRUE'; 'FOR' I := 2 'STEP' 1 'UNTIL' NN 'DIV' 2 'DO' 'FOR' J := 2 * I 'STEP' I 'UNTIL' NN 'DO' ARR [J] := 'FALSE'; 'FOR' I := 2 'STEP' 1 'UNTIL' NN 'DO' 'IF' ARR [I] 'THEN' OUTINTEGER (1, I); VPRINT ("\NDONE.") 'END' 'END'