Thema: Delphi Programm Optimierung

Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: Programm Optimierung

  Alt 9. Jan 2009, 19:44
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
  Mit Zitat antworten Zitat