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