Dear Sirs,
Following program (implementing sieve of Eratosthenes) doesn't work as expected: after adding [i] to SET it doesn't appear to be in it!!!
This is for i in [32..63,96..127,160..191,224-255]. Numbers 95 and 195 _couldn't_be_removed_ from SET sieve.
gpc --version
2.95.3 20010315 (release)
uname -a
OSF1 domac.alu.hr V4.0b 564 alpha
--marvin01.pas--------------------------------------------------------------
PROGRAM sieveprogram(input,output); {Sieve of Eratosthenes for finding prime numbers}
CONST maxN = 255; VAR i,j,k: CARDINAL; sieve: SET OF Byte;
BEGIN FOR i:= 1 TO maxN DO {initialize sieve} BEGIN sieve := sieve + [i]; IF (NOT (i IN sieve)) THEN writeln('Error: ', i, ' not in SET after adding!'); END;
FOR i:= 2 TO maxN DO BEGIN IF (i IN sieve) THEN FOR k := i+1 TO maxN DO IF ((k MOD i = 0) AND (k IN sieve)) THEN BEGIN sieve := sieve - [k]; IF (k IN sieve) THEN writeln('Error: ', k, ' in SET after deletion!'); END END;
FOR i:= 2 TO maxN DO IF (i IN sieve) THEN BEGIN writeln('Checking if really prime: ', i); FOR j:= 2 TO i-1 DO IF (i MOD j = 0) THEN writeln('Error: ', i,' % ', j, ' = 0.'); END
END.
--------------------------------------------------------------------------
Program compiles with warnings:
gpc marvin01.pas
marvin01.pas: In main program: marvin01.pas:12: warning: constructing limited integer set `0..511' marvin01.pas:23: warning: constructing limited integer set `0..511'
-------------------------------------------------------------------------- Program output (unexpected errors): --------------------------------------------------------------------------
./a.out
Error: 32 not in SET after adding! Error: 33 not in SET after adding! . . . Error: 63 not in SET after adding! Error: 96 not in SET after adding! Error: 97 not in SET after adding! Error: 98 not in SET after adding! . . . Error: 127 not in SET after adding! Error: 160 not in SET after adding! Error: 161 not in SET after adding! Error: 162 not in SET after adding! . . . Error: 191 not in SET after adding! Error: 224 not in SET after adding! Error: 225 not in SET after adding! Error: 226 not in SET after adding! . . . Error: 255 not in SET after adding! Error: 159 in SET after deletion! Error: 95 in SET after deletion! Error: 95 in SET after deletion! Checking: 2 Checking: 3 Checking: 5 Checking: 7 Checking: 11 Checking: 13 Checking: 17 Checking: 19 Checking: 23 Checking: 29 Checking: 31 Checking: 67 Checking: 71 Checking: 73 Checking: 79 Checking: 83 Checking: 89 Checking: 95 Error: 95 % 5 = 0. Error: 95 % 19 = 0. Checking: 131 Checking: 137 Checking: 139 Checking: 149 Checking: 151 Checking: 157 Checking: 159 Error: 159 % 3 = 0. Error: 159 % 53 = 0. Checking: 193 Checking: 197 Checking: 199 Checking: 211 Checking: 223
------------------------------------------------------------------------- Thank you for reading this far.
Best regards, Marvin
-- This message has been made up using recycled ideas and language constructs. No plant or animal has been injured in process of making this message.