Talk:ALGOL 68-primes: Difference between revisions

From Rosetta Code
Content added Content deleted
(Created a page with the source code for ALGOL 68-primes)
 
(→‎Source code: Include 0 in the sieve)
Line 6: Line 6:
OP PRIMESIEVE = ( INT n )[]BOOL:
OP PRIMESIEVE = ( INT n )[]BOOL:
BEGIN
BEGIN
[ 1 : n ]BOOL prime;
[ 0 : n ]BOOL prime;
prime[ 1 ] := FALSE; prime[ 2 ] := TRUE;
prime[ 0 ] := prime[ 1 ] := FALSE;
prime[ 2 ] := TRUE;
FOR i FROM 3 BY 2 TO UPB prime DO prime[ i ] := TRUE OD;
FOR i FROM 3 BY 2 TO UPB prime DO prime[ i ] := TRUE OD;
FOR i FROM 4 BY 2 TO UPB prime DO prime[ i ] := FALSE OD;
FOR i FROM 4 BY 2 TO UPB prime DO prime[ i ] := FALSE OD;
Line 16: Line 17:
END; # PRIMESIEVE #
END; # PRIMESIEVE #


# END primes.incl.a68 #
# END primes.incl.a68 #</lang>
</lang>

Revision as of 16:54, 29 August 2021

Source code

<lang algol68># primes.incl.a68: prime related operators, procedure etc. #

   # returns a sieve of primes up to n                                      #
   OP   PRIMESIEVE = ( INT n )[]BOOL:
        BEGIN
           [ 0 : n ]BOOL prime;
           prime[ 0 ] := prime[ 1 ] := FALSE;
           prime[ 2 ] := TRUE;
           FOR i FROM 3 BY 2 TO UPB prime DO prime[ i ] := TRUE  OD;
           FOR i FROM 4 BY 2 TO UPB prime DO prime[ i ] := FALSE OD;
           FOR i FROM 3 BY 2 TO ENTIER sqrt( UPB prime ) DO
               IF prime[ i ] THEN FOR s FROM i * i BY i + i TO UPB prime DO prime[ s ] := FALSE OD FI
           OD;
           prime
        END; # PRIMESIEVE #
  1. END primes.incl.a68 #</lang>