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) ∧ N ≠ 2 then
           goto RET;

         for I ≔ 3 step 2 until N ÷ 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 ÷ 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