'BEGIN' 'COMMENT' -- From the NASE A60 distribution -- 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) & N != 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; PRINTSLN (`FIRST:'); 'FOR' I := 2 'STEP' 1 'UNTIL' NN 'DO' 'IF' ISPRIME (I) 'THEN' PRINTNLN (I); PRINTSLN (`DONE.') 'END'; 'BEGIN' 'COMMENT' second algorithm (sieve) ; 'BOOLEAN' 'ARRAY' ARR [2 : NN]; 'INTEGER' I, J; PRINTSLN (`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' PRINTNLN (I); PRINTSLN (`DONE.') 'END' 'END'