Ich würde sagen: Trenne den Code von der Darstellung.
Du benutzt so was ähnliches wie das Sieb des Eratosthenes - aber warum nur so ähnlich?
Du möchtest alle Primzahlen von 0 bis X finden ?
Dann erstelle dir ein dyn.
Array of Boolean mit der Länge X + 1.
Dort setzt du alle Werte erstmal auf true (true heißt später Primzahl, false keine Primzahl) nur den Eintrag 0 und 1 auf false (per Def. keine Primzahl)
Dann gehst du das Array durch, und zwar streichst du alle vielfachen der 2 weg, und gehst dann zur nächsten, nicht weggestrichenen Zahl:
Code:
var
i, j: Integer;
for i := 2 to sqrt(X) do // Es gibt eine Fkt. sqrt() statt power(...)
begin
if not arr[i] then continue;
j := i * 2;
while j <= X do
begin
arr[j] := false;
j := j + i;
end;
end;
Im Anschluss kannst du dann alle Primzahlen (die, bei denen arr[y] true ist) ausgeben