Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi errechnet keine Primzahlen größer als 5000 (https://www.delphipraxis.net/172097-delphi-errechnet-keine-primzahlen-groesser-als-5000-a.html)

Furtbichler 12. Dez 2012 19:43

AW: Delphi errechnet keine Primzahlen größer als 5000
 
Und dann ist das noch so, das alle Primzahlen > 3 der Form 6n+/-1 sind. Also kann man alle Primzahlen so prüfen
Delphi-Quellcode:
// 2,3 => Primzahl
p := 5;
repeat
  If IsPrime(P) then AddToPrimeList(P);
  If IsPrime(P+2) then AddToPrimeList(P+2);
  inc(P,6);
until p>maxint-6; // oder so ähnlich
Und die Funktion IsPrime prüft nicht bis Wert/2, sondern nur bis Sqrt(Wert) und da auch nur mit allen bisherigen Primzahlen, also:

Delphi-Quellcode:
Function IsPrime (P : Integer): Boolean;
Begin
  MaxP := Trunc(Sqrt(P));
  I := 0;
  While (Primes[I]<MaxP) do
    If P Mod Primes[I]<>0 then
      exit(false)
   else
      inc(I);
  exit(true)
End;
Ist aber ungetestet.

Und noch eigentlicher verwendet man 'Sieve of Atkin' oder 'Sieve of Eratosthenes'. Da bekommt man dann alle Primzahlen < 2^31 in so 1-2 Sekunden, wenn ich mich richtig erinnere.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Seite 2 von 2     12   

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