Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zahlen gesucht (https://www.delphipraxis.net/4790-zahlen-gesucht.html)

Dax 12. Mai 2003 06:31


Zahlen gesucht
 
Wie kann ich ganz schnell und einfach rieseige Primzahlen erzeugen? Um zu checken, ob's eine ist, bruacht man ja ziemlich lange und 2^x-1 lifert mir nicht genug Primzahlen...... könnt ihr mir helfen?


MfG gecko2000

BigCrunsh 12. Mai 2003 08:13

hoffe es hilft trotzdem
 
was heißt schnell...
ich hab ne procedure, die dir Primzahlen ermittelt... musst mal gucken,
ob dir das reicht....
Delphi-Quellcode:
procedure Primzahlen;
var prim: boolean;
    i,k: integer;
begin
 listbox1.Clear;
 i:=2;
 gauge1.maxvalue:=strtoint(edit1.text);
 gauge1.progress:=0;
 while i<=strtoint(edit1.text) do
 begin
  prim:=true;
  if i>2 then
  begin
   for k:=i-1 downto 2 do
   begin
    if (i mod k)=0 then prim:=false;
    application.processmessages;
   end;
  end;
  if prim then listbox1.Items.add(inttostr(i));
  inc(i);
  gauge1.progress:=i;
 end;
end;
hab ne gauge1 drin (weil es für große zahlen echt ne weile dauern kann
als anzeige drin)
in das edit fehlt schreibst du die zahl, bis wohin du die primzahlen haben willst. und in die listbox werden dir dann alle geschrieben...

man könnte auch mit dem heap arbeiten und so schneller voran kommen, aber ich denke es kann schnell zu einem stack-überlauf kommen... aber sonst kannst du ja noch mal schreiben

Gruß BC

BigCrunsh 12. Mai 2003 13:08

1.Besserung
 
also ich seh ein es gibt ne kleinigkeit die man verbessern kann:
Delphi-Quellcode:
procedure Primzahlen;
var prim: boolean;
    i,k: integer;
begin
form1.listbox1.Clear;
i:=2;
form1.gauge1.maxvalue:=strtoint(form1.edit1.text);
form1.gauge1.progress:=0;
while i<=strtoint(form1.edit1.text) do
begin
  prim:=true;
  if i>2 then
  begin
  k:=0;
  while (k<form1.listbox1.items.count) and (i>=strtoint(form1.listbox1.items[k])*2) and prim do
  begin
    if (i mod strtoint(form1.listbox1.items[k]))=0 then prim:=false;
    application.processmessages;
    inc(k);
   end;
  end;
  if prim then form1.listbox1.Items.add(inttostr(i));
  inc(i);
 form1. gauge1.progress:=i;
end;
end;
Ab Zahlen von 15000 macht sich das sehr spürbar...

P.S.: wenn jemand noch nen schnelleren Algorithmus findet wär ich sehr
dankbar wenn mir den jemand mal schicken könnte...

nailor 12. Mai 2003 13:15

echte primzahlen wird schwer. aber such mal bei google nach pseudoprimzahlen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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