P_8_2.PAS
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:1k
源码类别:

编译器/解释器

开发平台:

Others

  1. { program 8.2
  2.   generate the primes between 3..10000 using a
  3.   sieve containing odd integers in this range. }
  4. program primes(output);
  5. const
  6.   wdlength = 59; {implementation dependent}
  7.   maxbit = 58;
  8.   w = 84; {w=n div wdlength div 2}
  9. var
  10.   sieve, primes : array[0..w] of set of 0..maxbit;
  11.   next : record word,bit : integer
  12.          end;
  13.   j,k,t,c : integer; empty:boolean;
  14. begin {initialize}
  15.   for t:=0 to w do
  16.     begin sieve[t] := [0..maxbit]; primes[t] := [] end;
  17.   sieve[0] := sieve[0]-[0]; next.word := 0;
  18.   next.bit := 1; empty := false;
  19.   with next do
  20.   repeat {find next prime}
  21.     while not(bit in sieve[word]) do bit := succ(bit);
  22.     primes[word] := primes[word] + [bit];
  23.     c := 2*bit + 1;
  24.     j := bit; k := word;
  25.     while k<=w do {eliminate}
  26.     begin sieve[k] := sieve[k] - [j];
  27.       k := k + word*2; j := j + c;
  28.       while j>maxbit do
  29.         begin k := k+1; j := j - wdlength
  30.         end
  31.     end;
  32.     if sieve[word]=[] then
  33.       begin empty := true; bit := 0
  34.       end;
  35.     while empty and (word<w) do
  36.       begin word := word+1; empty := sieve[word]=[]
  37.       end
  38.   until empty; {ends with}
  39. end.