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) TIMES 2 = N;
            integer I;
            ISPRIME := false;
            if EVEN(N) IMPL N NOTEQUAL 2 then goto RET;
            for I := 3 step 2 until N ÷ 2 do
              if ENTIER(N ÷ I) TIMES 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 ÷ 2 do
          for J := 2 TIMES 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 ;