The sieve of Sundaram: Difference between revisions

Added Algol 68
(Added Wren)
(Added Algol 68)
Line 22:
;References:
* The article on [[wp:Sieve_of_Sundaram|Wikipedia]].
 
=={{header|ALGOL 68}}==
{{Trans|Nim}}
To run this with Algol 68G, you will need to increase the heap size by specifying e.g. <code>-heap=64M</code> on the command line.
<lang algol68>BEGIN # sieve of Sundaram #
INT n = 8 000 000;
INT none = 0, mark1 = 1, mark2 = 2;
[ 1 : n ]INT mark;
FOR i FROM LWB mark TO UPB mark DO mark[ i ] := none OD;
FOR i FROM 4 BY 3 TO UPB mark DO mark[ i ] := mark1 OD;
 
INT count := 0; # Count of primes. #
[ 1 : 100 ]INT list100; # First 100 primes. #
INT last := 0; # Millionth prime. #
INT step := 5; # Current step for marking. #
 
FOR i TO n WHILE last = 0 DO
IF mark[ i ] = none THEN # Add/count a new odd prime. #
count +:= 1;
IF count <= 100 THEN
list100[ count ] := 2 * i + 1
ELIF count = 1 000 000 THEN
last := 2 * i + 1
FI
ELIF mark[ i ] = mark1 THEN # Mark new numbers using current step. #
IF i > 4 THEN
FOR k FROM i + step BY step TO n DO
IF mark[ k ] = none THEN mark[ k ] := mark2 FI
OD;
step +:= 2
FI
# ELSE must be mark2 - Ignore this number. #
FI
OD;
 
print( ( "First 100 Sundaram primes:", newline ) );
FOR i FROM LWB list100 TO UPB list100 DO
print( ( whole( list100[ i ], -3 ) ) );
IF i MOD 10 = 0 THEN print( ( newline ) ) ELSE print( ( " " ) ) FI
OD;
print( ( newline ) );
IF last = 0 THEN
print( ( "Not enough values in sieve. Found only", whole( count, 0 ), newline ) )
ELSE
print( ( "The millionth Sundaram prime is ", whole( last, 0 ), newline ) )
FI
END</lang>
{{out}}
<pre>
3 5 7 11 13 17 19 23 29 31
37 41 43 47 53 59 61 67 71 73
79 83 89 97 101 103 107 109 113 127
131 137 139 149 151 157 163 167 173 179
181 191 193 197 199 211 223 227 229 233
239 241 251 257 263 269 271 277 281 283
293 307 311 313 317 331 337 347 349 353
359 367 373 379 383 389 397 401 409 419
421 431 433 439 443 449 457 461 463 467
479 487 491 499 503 509 521 523 541 547
 
The millionth Sundaram prime is 15485867
</pre>
 
=={{header|F_Sharp|F#}}==
3,038

edits