SerjeyMinsk, вам вроде понятно сказали, что ваш алгоритм - обычное решето Эратосфена, причём хуже, чем его обычно делают.
Т.е. абсолютно ничего нового.
Вот оптимизированный код, но он использует расширения GNU паскаля (LongWord - 8-ми байтовый беззнаковый), так что для своего компилятора подгоняйте сами.
Я ещё добавил возможность задавать n в командной строке, вывод чисел на экран только если в командной строке есть два аргумента, иначе вывод занимает больше времени, чем поиск.
Код:
Program abube;
var
   flag  : array[0..99999999] of boolean;
   n,k,i : Word;
   n2    : LongWord;
   size  : Word;
   count : Word;
   err   : Integer;
begin
   if ParamCount >= 1 then
   begin
      Val(ParamStr(1), n, err);
   end
   else
   begin
      writeln('Vvedite ne4etnoe 4islo');
      readln(n);
   end;
   if n mod 2 = 0 then
   begin
      writeln('Prosil zhe ne4etnoe!');
      n:=n+1;
      writeln('Budet ',n);
   end;
   n2 := LongWord(n)*n;
   size := 2*n-3;
   flag[0]:=false;
   for i:=1 to size do
      flag[i]:=true;
   
   k:=3;
   while k<n do
   begin
      i:=LongWord(n)*(n-k) div 2 mod k;
      while i <= size do
      begin
         flag[i]:=false;
         inc(i,k);
      end;
      inc(k, 2);
   end;
   count := 0;
   if ParamCount >= 2 then
   begin
      for i:=0 to size do
         if flag[size-i] then
         begin
            inc(count);
            write(n2-size*2+i*2);
            if count mod 10 = 0 then
               writeln
            else
               write(' ');
         end;
      writeln;
   end
   else
   begin
      for i:=0 to size do
         if flag[i] then
            inc(count);
   end;
   writeln('Number of primes from ',n2-4*n+4,' to ',n2,' - ',count);
end.