AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Sehr schneller Primzahl-Finder
Thema durchsuchen
Ansicht
Themen-Optionen

Sehr schneller Primzahl-Finder

Ein Thema von GTA-Place · begonnen am 28. Nov 2004 · letzter Beitrag vom 28. Apr 2007
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    
GTA-Place
Registriert seit: 5. Apr 2004
Auch euch will ich meinen Source nicht vorbehalten:

Delphi-Quellcode:
function Prim(Zahl: Cardinal): Boolean;
var
  Teiler: PCardinal;
  Wurzel: Cardinal;
begin
  Result := True; // Result = True
  if not odd(Zahl) OR (Zahl <= 5) then // Ist die Zahl nich ungerade oder kleiner als 5, dann
  begin
    if (Zahl <> 2) AND (Zahl <> 3) AND (Zahl <> 5) then // Ist die Zahl nicht 2 und nicht 3 und nicht 5, dann
      Result := False; // Result = False
    Exit; // Exit
  end;
  Teiler := @PrimS[0]; // Teiler = @PrimS[0]
  Wurzel := Trunc(sqrt(Zahl)); // Wurzel aus der Zahl
  while Teiler^ <= Wurzel do // Solange Teiler^ <= Wurzel ist, mache
  begin
    if Zahl mod Teiler^ = 0 then // Ist Zahl / Teiler^ = Rest 0, dann
    begin
      Result := False; // Result = False
      Break; // Break
    end;
    Inc(Teiler); // Teiler erhöhen um 1
  end;
end;
Delphi-Quellcode:
procedure TMainForm.StartButClick(Sender: TObject);
var
  Start, Ende: Real;
  Z: PCardinal;
  X, LPrim: Cardinal;
  PrimF: TStringList;
begin
  try
    Von := StrToInt(VonEdit.Text); // Start
    Bis := StrToInt(BisEdit.Text); // Endwert

 
    if Bis > 10 then
      SetLength(PrimS, Trunc(0.4*Bis-(Bis/4))) // Größe des Array: 0.4*Bis-(Bis/4)
    else
      SetLength(PrimS, 4);

 
    LPrim := 0; // Letze Prim = 0
    Z := @PrimS[0]; // Gefundene Prims = 0

 
    if (Von >= 0) AND (Bis >= 0) AND (Von < Bis) then // Von >= 0; Bis >= 0; Von < Bis;
    begin
      Start := GetTickCount; // Start-Zeit

 
      for X := Von to Bis do // Schleife: Startwert -> Endwert
      begin
        if Prim(X) then // Funktion ausführen, wenn Prim dann
        begin
          Z^ := X; // Prim in Array schreiben
          Inc(Z); // Z erhöhen um 1
          LPrim := X; // Letze Prim = X
        end;
        if X mod 20000 = 0 then // Wenn X : 20.000 = Rest 0, dann
        begin
          Application.ProcessMessages; // Anwendung aktualisieren
          PrimLab.Caption := 'Aktuelle Primzahl: ' + IntToStr(LPrim); // Akt. Primzahl anzeigen
        end;
      end;

 
      Ende := GetTickCount; // End-Zeit
      DauerLab.Caption := 'Diese Überprüfung hat ' + FloatToStr((Ende - Start) / 1000) + ' Sekunden gedauert.'; // Dauer anzeigen

 
      PrimLab.Caption := 'Speichern...'; // "Speichern..." anzeigen

 
      Z := @PrimS[0]; // Z auf 0 stellen
      PrimF := TStringList.Create; // Stringlist erzeugen

 
      for X := 0 to Length(PrimS)-1 do // Von 0 bis Größe des Array
      begin
        if Z^ = 0 then // Wenn Z^ = 0, dann
          Break; // Break
        PrimF.Add(IntToStr(Z^)); // Prim in Stringlist schreiben
        Inc(Z); // Z erhöhen um 1
      end;

 
      PrimF.SaveToFile('Prim.txt'); // Stringlist speichern
      PrimF.Free; // Stringlist freigeben

 
      PrimLab.Caption := 'Aktuelle Primzahl: ' + IntToStr(LPrim); // Akt. Primzahl anzeigen
    end
    else
      ShowMessage('Ungültige Eingabe(n)!'); // Bei falschen Eingaben, Nachricht anzeigen
  except
    ShowMessage('Es ist ein Fehler aufgetreten!'); // Wenn Fehler auftritt, Nachricht anzeigen
  end;
end;
Das Programm überprüft 10.000.000 Zahlen in erstaunlichen 6 Sekunden.
Und das Speichern geht so schnell, dass man "Speichern..." gar nicht sieht.
 
Benutzerbild von idontwantaname
idontwantaname

 
Turbo Delphi für Win32
 
#11
  Alt 28. Nov 2004, 18:04
@sakura:
ich weiß nicht wieso, aber wenn ich dein beispiel öffne, hängt sich delphi auf
Oliver Hanappi
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 12 Athens
 
#12
  Alt 28. Nov 2004, 18:07
Zitat von idontwantaname:
@sakura:
ich weiß nicht wieso, aber wenn ich dein beispiel öffne, hängt sich delphi auf
Müssen wohl 2005 Bugs drinne sein... Keine Ahnung, bei mir gehts. In D7 und D2005.

In D5 musst Du die Unit Variants löschen.

......

P.S.: Die Reihenfolge der schnellsten Compilate: D2005, D5, D7
Daniel Lizbeth
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

 
Delphi 2010 Professional
 
#13
  Alt 28. Nov 2004, 18:33
Zitat von sakura:
P.S.: Die Reihenfolge der schnellsten Compilate: D2005, D5, D7
D2005 ist schneller als D5, das den angeblich Compiler mit der besten Optimierung hat?

mfG
mirage228
David F.
  Mit Zitat antworten Zitat
GTA-Place

 
Delphi 7 Personal
 
#14
  Alt 28. Nov 2004, 18:34
Die Kommentare stehen nicht im Prog drin.
War nur für hier, damit man sie versteht.
Fabian
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 12 Athens
 
#15
  Alt 28. Nov 2004, 18:41
Zitat von mirage228:
D2005 ist schneller als D5, das den angeblich Compiler mit der besten Optimierung hat?
In diesem Fall ja

......
Daniel Lizbeth
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 12 Athens
 
#16
  Alt 28. Nov 2004, 18:42
Zitat von GTA-Place:
War nur für hier, damit man sie versteht.
Wo tragen folgende Beispiele zum Verständnis bei
Delphi-Quellcode:
Result := True; // Result = True
  if not odd(Zahl) OR (Zahl <= 5) then // Ist die Zahl nich ungerade oder kleiner als 5, dann
...
      Result := False; // Result = False
    Exit; // Exit
...
  Teiler := @PrimS[0]; // Teiler = @PrimS[0]
  Wurzel := Trunc(sqrt(Zahl)); // Wurzel aus der Zahl
...
......
Daniel Lizbeth
  Mit Zitat antworten Zitat
GTA-Place

 
Delphi 7 Personal
 
#17
  Alt 28. Nov 2004, 18:47
Hab einfach mal alles kommentiert.
Wie gesagt, im Prog. ist das net.
Fabian
  Mit Zitat antworten Zitat
Nicodius

 
Delphi 2006 Architect
 
#18
  Alt 28. Nov 2004, 19:30
naja .. also wenn ich die dpr öffne stürzt mein liebes delphi ab ... liegt das an delphi 2005 das du beitzt?

... sonst geht alles .. aber wenn ich das jetzt öffne - absturz
Nico Müller
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

 
Delphi 12 Athens
 
#19
  Alt 28. Nov 2004, 20:17
Zitat von Nicodius:
naja .. also wenn ich die dpr öffne stürzt mein liebes delphi ab ... liegt das an delphi 2005 das du beitzt?
Nein, eigentlich nicht. Wie gesagt, selbst D5 öffnet es

......
Daniel Lizbeth
  Mit Zitat antworten Zitat
Nicodius

 
Delphi 2006 Architect
 
#20
  Alt 28. Nov 2004, 20:20
kmisch ich kann alles bis auf den source von dir öffnen
Nico Müller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 9     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz