[comp.binaries.apple2] SIEVE

tm@polari.UUCP (Toshi Morita) (07/24/90)

Demo Pidgin program


;
; Sieve benchmark
;

top;

byte FL(10001);

int IIN;
byte NU;
int ICO;
int IPR;
int IRE;

byte AA;
byte CR;
int ITH;
byte TN;
int ISI;
byte ZE;

byte SP;

;
; main code
;

beginmain(AC,IAV);

    CR=+013;
    SP=+032;

    ZE=+000;

    ITH=+00003;
    TN=+010;
    ISI=+10000;

    ms 'Sieve x 1'
    ms '0...     '
    write CR;

    NU=+255;
        while;
            NU++;
            AA=NU<!TN;
        on AA;

            ICO=+00000;             Set number of primes to zero

            IIN=+00000;
                while;              Clear flags array to one
                    IIN++;
                    AA=IIN<=ISI;
                on AA;
                    FL(IIN)=+001;
                endwhile;

            IIN=+00000;
                while;
                    IIN++;
                    AA=IIN<=ISI;
                on AA;
                    AA=FL(IIN);
                        if AA;
                            IPR=IIN+IIN;
                            IPR=IPR+ITH;
;                            decprt IPR;
;                            write SP;
                            IRE=IIN+IPR;

                                while;
                                    AA=IRE<!ISI;
                                on AA;
                                    FL(IRE)=ZE;
                                    IRE=IRE+IPR;
                                endwhile;

                            ICO++;
                        endif;
                endwhile;

        endwhile;

    ms '...done. ';
    write CR;
    decprt ICO;
    ms ' primes. ';

endmain;

bottom;

tm@polari.UUCP (Toshi Morita) (08/05/90)

Sieve demo for QForth.



10000 constant size

create flags size 1+ allot

variable count
variable prime
variable ref

: sieve

  cr ." Sieve x 10... " cr

  10 0
    do

      0 count !
      flags size 1+ 1 fill

      size 1+ 1
        do 
          flags i + c@
            if
              i dup + 2+ 1+ prime !
              i prime @ + ref !
                begin
                  ref @ size <
                while
                  0 flags ref @ + c!
                  ref @ prime @ + ref !
                repeat
              count @ 1+ count !
            else
            then
        loop

   loop

  ." ...done. " cr count ? ." primes. "

;