Siemka,
Mam do napisania program, który ustali, jakie liczby w zakresie są pierwsze za pomocą sita eratostenesa, dodatkowo jeśli liczba będzie pierwsza, ma wypisać, która to l.p. z kolei (czyli 2 jest pierwszą, 3 drugą, 5 trzecią itd.). Oprócz tego limit pamięci na ten program został ustalony tak, że tylko rozwiązanie, w który jeden bit odpowiada jednej liczbie będzie dobre. Czyli stworzyłem tablicę, w której każdy element przechowuje informacje o 8 liczbach, np. t[1] = 010101102 i kolejno od prawej mamy liczby od 1 do 8, 1 oznacza liczbę pierwszą, 0 niepierwszą.
Jak bym się nie zabierał do tego zadania, zawsze albo wyskakuje error (obecnie 201), albo wyniki są po prostu błędne. Będę wdzięczny za wszelką pomoc, poniżej załączam owoc mojej dotychczasowej pracy.

program era;
var x,n,i,j,k,l,p,r,q,b:longint;
t:array[1..1250000] of byte;

BEGIN
for i:=1 to 1250000 do t[i]:=255;
t[1]:= 254;

for b:=2 to 8 do

begin
if t[1] and (1 shl b-1) <>0 then
        begin
        p:=b;
        j:=b*p;

        while j<=10000000 do
                begin
                if j mod 8 <> 0 then

                        begin
                        l:=(j div 8) + 1;
                        r:=j mod 8;
                        t[l]:=t[l] - (1 shl r);
                        end

                        else
                        begin
                        l:=j div 8;
                        t[l]:=t[l]-1;
                        end;
                p:=p+1;
                j:=b*p;
                end;
        end;
end;

for i:=2 to 1250000 do begin
                       for b:=1 to 8 do begin
                       if t[i] and (1 shl b-1) <> 0 then

                                                begin
                                                p:=b;
                                                j:=b*p;
                                                   while j<=10000000 do
                                                   begin

                                                   if j mod 8 <>0 then
                                                   begin
                                                   l:=(j div 8) +1;
                                                   r:=j mod 8;
                                                   t[l]:=t[l] - (1 shl r);
                                                   end

                                                   else
                                                   begin
                                                   l:=j div 8;
                                                   t[l]:=t[l]-1;
                                                   end;

                                                   p:=p+1;
                                                   j:=b*p;
                                                   end;
                                                end;
                                     end;
                      end;
readln(x);
while x<>0 do begin
        n:=0;
        if x mod 8 <> 0 then begin
                l:=trunc(x div 8) +1;
                r:=x mod 8;
                if t[l] and (1 shl r-1) <> 0 then begin
                        for i:=1 to l do begin
                                         for b:=1 to 8 do begin
                                                          k:=(i-1)*8 +b;
                                                          if b<>8 then
                                                            begin
                                                            if k and (1 shl b-1) = (1 shl b-1)
                                                            then n:=n+1;
                                                            end
                                                            else
                                                            begin
                                                            if k and 1 = 1 then n:=n+1;
                                                            end;
                                                          end;
                                         end;
                                                   writeln(x,' to liczba pierwsza numer ',n,'.');
                                                   end
                                                   else
                                                   writeln(x,' nie jest pierwsza.');
                                                   end

                      else begin
                           l:=x div 8;
                           if t[l] and 1 <> 0 then begin
                                                 for i:=1 to l do begin
                                                   for b:=1 to 8 do begin
                                                     k:=(i-1)*8 +b;
                                                     if b<>8 then
                                                         begin
                                                         if k and (1 shl b-1) = (1 shl b-1)
                                                         then n:=n+1;
                                                         end

                                                         else
                                                         begin
                                                         if k and 1 = 1 then n:=n+1;
                                                         end;
                                                                    end;
                                                                  end;

                           writeln(x,' to liczba pierwsza numer ',n,'.');
                           end
                           else
                           writeln(x,' nie jest pierwsza.');
                           end;
readln(x);
end;
END.


 

pozdrawiam