AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlen gesucht

Ein Thema von Dax · begonnen am 12. Mai 2003 · letzter Beitrag vom 12. Mai 2003
Antwort Antwort
Dax
(Gast)

n/a Beiträge
 
#1

Zahlen gesucht

  Alt 12. Mai 2003, 06:31
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
  Mit Zitat antworten Zitat
BigCrunsh

Registriert seit: 13. Dez 2002
Ort: Berlin
11 Beiträge
 
Delphi 7 Enterprise
 
#2

hoffe es hilft trotzdem

  Alt 12. Mai 2003, 08:13
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
  Mit Zitat antworten Zitat
BigCrunsh

Registriert seit: 13. Dez 2002
Ort: Berlin
11 Beiträge
 
Delphi 7 Enterprise
 
#3

1.Besserung

  Alt 12. Mai 2003, 13:08
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...
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#4
  Alt 12. Mai 2003, 13:15
echte primzahlen wird schwer. aber such mal bei google nach pseudoprimzahlen...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:54 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