home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
elan
/
demo
/
sieve.eln
< prev
next >
Wrap
Text File
|
1987-09-02
|
2KB
|
77 lines
PROC put (INT CONST a):
IF get column + int length > xsize
THEN line
FI;
put (text (a, int length))
ENDPROC put;
sieve:
LET limit = 1000;
calculate int length;
prepare the sieve;
start with the first odd prime;
WHILE another prime to sieve
REP
cross out all multiples;
take the next prime
ENDREP;
print the sieve;
how long.
calculate int length:
INT VAR lgth :: 1;
WHILE 10 ** lgth < limit
REP lgth INCR 1
ENDREP;
INT CONST int length :: lgth + 2.
prepare the sieve:
ROW limit BOOL VAR is prime;
put ("Sieving for primes <");
put (limit);
line (2);
put (2);
call all odd numbers prime.
call all odd numbers prime:
INT VAR i;
FOR i FROM 1 UPTO limit
REP is prime [i] := i MOD 2 = 1
ENDREP.
start with the first odd prime:
INT VAR prime :: 3.
another prime to sieve:
prime * prime <= limit.
cross out all multiples:
put (prime);
INT VAR multiple :: prime * prime;
WHILE multiple <= limit
REP
is prime [multiple] := false;
multiple INCR prime
ENDREP.
take the next prime:
REP prime INCR 2
UNTIL is prime [prime]
ENDREP.
print the sieve:
FOR i FROM prime UPTO limit
REP
IF is prime [i]
THEN put (i)
FI
ENDREP.
how long:
line (2);
put ("Time=");
put (exectime);
put (" sec.").