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.