AGB  ·  Datenschutz  ·  Impressum  







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

Primzahlen ermitteln?

Ein Thema von Jan13490 · begonnen am 10. Mai 2007 · letzter Beitrag vom 12. Mai 2007
Antwort Antwort
Seite 2 von 3     12 3      
11. Mai 2007, 13:40
Dieses Thema wurde von "Phoenix" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Hier gehts um Delphi...
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 13:58
hi wollte auchmal was posten.

Delphi-Quellcode:

uses
  math;

Function IsPrim(zahl : Integer): boolean;
var
i: integer;
begin
  result := true;
  If zahl = 1 then
  begin
    result := false;
    exit;
  end;
  For i := 2 to Trunc(sqrt(zahl))+1 do
  begin
    If ((zahl mod i) = 0) then
    begin
      result := false;
      exit;
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin


 for i := 0 to 1000 do
  begin
   if isprim(i) then memo1.Lines.Add(inttostr(i));

 end;

end;
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 14:03
Ich hab grad mal just for fun wieder nen Primzahltester und -finder gebastelt. Eigentlich muss man überhaupt nicht mit dem Sieb des Erathostenes arbeiten, die Geschwindigkeit ist auch so hoch genug.

@agm65: Das hier dürfte schneller sein:

Delphi-Quellcode:
function IsPrimeNumber(AValue: Integer): Boolean;
var I: Integer;
begin
  Result:=False;
  if AValue<2 then exit;
  I:=2;
  while I*I<=AValue do
  begin
    if AValue mod I=0 then exit;
    inc(I);
  end;
  Result:=True;
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 14:57
Ich will auch mal was posten

Eine einfach Lösung (ohne Optimierung!!!).
Aber als Beispiel für Jan13490 gut geeignet, da er schreibt Anfänger zu sein.

Mann muß natürlich nicht den ganzen Zahlenraum zwischen 1 und z durchlaufen,
aber diese Lösung ist einfach zu verstehen.


Delphi-Quellcode:
function isPrime(z: Integer):Boolean;
var
  i: Integer;
begin
  i := 2;
  // solange (z nicht durch i teilbar ist) und (i kleiner z ist) erhöhe i um 1
  while (z mod i > 0) and (i < z) do
  begin
    inc(i);
  end;
  // Bei z angekommen = Primzahl
  Result := (i = z);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
  begin
    // wenn i Prim, dann ab ins Memo
    if isPrime(i) then Memo1.Lines.Add(IntToStr(i));
  end;
end;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 15:01
Zitat von 3_of_8:
die Geschwindigkeit ist auch so hoch genug.

@agm65: Das hier dürfte schneller sein:

Delphi-Quellcode:
function IsPrimeNumber(AValue: Integer): Boolean;
var I: Integer;
begin
  Result:=False;
  if AValue<2 then exit;
  I:=2;
  while I*I<=AValue do
  begin
    if AValue mod I=0 then exit;
    inc(I);
  end;
  Result:=True;
end;
Und sie kann och erhöht werden, in dem du nur bis zur Quadratwurzel testest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 15:03
Das tue ich.

Siehs dir genau an.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#17

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 15:08
Dann könntest du aber eine weitere Variable nehmen und da die Wurzel reinschreiben. Dann sparst du pro Schleife noch eine Multiplikation.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 19:41
Nur ist die Wurzel eine Gleitkommaoperation, und ich glaube kaum, dass das schneller ist als die Multiplikationen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#19

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 20:03
Delphi-Quellcode:
function IsPrimeNumber(AValue: Integer): Boolean;
var I: Integer;
wurzel: integer;
begin
  Result:=False;
  Wurzel:=ceil(sqrt(AValue));
  if AValue<2 then exit;
  I:=2;
  while I<= Wurzeldo
  begin
    if AValue mod I=0 then exit;
    inc(I);
  end;
  Result:=True;
end;
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: Primzahlen ermitteln?

  Alt 11. Mai 2007, 20:04
Es ist trotzdem eine Gleitkommaoperation, und das ziehen einer Wurzel ist dabei nicht einmal eine besonders schnelle. Es ist eine denkbare Alternative, an die ich zuerst auch gedacht habe, aber dann nicht eingebaut habe. Aber auch die mit den Multiplikationen geht recht gut.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:41 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