![]() |
Problem beim Sieb des Eratostenes
Hi
Ich soll mit einem Dyn. Array das Sieb des Eratostenes schreiben. Die Grundidee dafür ist nicht so schwer: Ich nehme die erste Zahl in meinem Array (das von 2 bis 1000 gefüllt ist) und streiche alle Vielfachen der Zahl raus. Dann nehme ich die nächste Zahl(die ungleich 0 ist) und so weiter. Alle Zahlen denen ich so begegne müssen dann prim sein. Die will ich dann in einem Stringgrid (sg1) ausgeben. Ich komme bei dem Code einfach nicht weiter. :gruebel: Vielleicht kann mir jemand helfen. :-D
Delphi-Quellcode:
TXHbyTOX
lenght:=strtoint(egroesse.Text);
SetLength(Liste,lenght); for index:=1 to lenght do begin Liste[index]:=index; end; index:=1; abstand:=1; zeile:=1; while index<lenght do begin inc(abstand); index:=abstand; if liste[index] > 0 then begin while index < lenght do begin index:=index+abstand; liste[index]:=0; end; end else begin sg1.RowCount:=sg1.RowCount+1; sg1.cells[0,zeile]:=inttostr(zeile); sg1.cells[1,zeile]:=inttostr(index); inc(zeile); end; |
Re: Problem beim Sieb des Eratostenes
Hi,
Ich hab ein String Grid zwar ehrlich gesagt noch nie benutzt, aber tut's denn nicht auch eine Listview oder eine Listbox? :gruebel: Grüße, Dani :dance: |
Re: Problem beim Sieb des Eratostenes
Hallo,
ich habe Dir mal ein Beispiel aufgeschrieben:
Delphi-Quellcode:
Da dynamische Arrays immer bei 0 beginnen, habe ich bewußt ein Element mehr angefordert, um Rechnerei zu sparen. Du solltest nochmal überlegen, ob meine Schleifenendwerte stimmen, da habe ich nicht viel Grips reingesteckt. Mein Memo kannst du wieder durch das Grid ersetzen.
procedure TForm1.Button1Click(Sender: TObject);
var Liste: array of Integer; Len, I, J: Integer; begin Memo1.Lines.Clear; Len := StrToInt(EGroesse.Text); SetLength(Liste, Len + 1); for I := 1 to Len do begin Liste[I] := I; end; for I := 2 to Len div 2 do begin if Liste[I] <> 0 then begin for J := 2 to Len div I do begin Liste[I * J] := 0; end; end; end; for I := 1 to Len do begin if Liste[I] <> 0 then begin Memo1.Lines.Add(IntToStr(Liste[I])); end; end; Finalize(Liste); end; Viele Grüße |
Re: Problem beim Sieb des Eratostenes
An alle Primzahlenrechner: bitte beachtet, 1 ist keine Primzahl.
|
Re: Problem beim Sieb des Eratostenes
Zitat:
Gruß Hagen |
Re: Problem beim Sieb des Eratostenes
Weil eine Primzahl x durch genau zwei natürliche Zahlen teilbar sein muss - diese Zahlen seien eins (1) und die Primzahl (x) selbst.
Betonung liegt dabei auf genau zwei. ;-) ...:cat:... |
Re: Problem beim Sieb des Eratostenes
Zitat:
Gruß Hagen |
Re: Problem beim Sieb des Eratostenes
Moin Hagen,
die Definition, die ich mal dazu gelernt habe: Eine Primzahl ist genau durch 1 und sich selber teilbar. Keine Zahl mehr, keine weniger. |
Re: Problem beim Sieb des Eratostenes
Zitat:
Will man beweisen warum es so sein MUSS reicht eine solche Definition aber nicht aus. Der eigentliche Beweis (erst viel später durchgeführt) warum 1 keine Primzahl ist führt zu der Bestätigung das 1 die EINHEIT in jedem System ist. Sie hat wichtigere Eigentschaften als alle anderen Zahlen. Man könnte die 1 als Primzahl bezeichnen was aber in der Begrifflichkeit der Mathematik alle Definitionen über den Haufen werfen würde. Das heist aber nicht das die 1 als solches nicht auch eine Primzahl sein könnte. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz