Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Primzahlen Sieb (https://www.delphipraxis.net/130409-primzahlen-sieb.html)

harryi 7. Mär 2009 23:12


Primzahlen Sieb
 
Hallo,

ich programmiere zurzeit als Anfänger einen Primzahlen Sieb nach eratosthenes Methode.

Ich habe eigentlich alles verstanden, aber irgendwie will es nicht klappen.
Könnt ihr mir sagen, wo der Fehler liegt?
Wie kann ich die Lösung mit stringgrid1 verknüpfen?

Danke



Delphi-Quellcode:
procedure TForm1.eratosthenes;
var prim:Array[1..100000]of Integer;          //Zahlen von 1 bis 250000
    i,v:integer;                              //i=Zahl

begin
prim[i]:=1;
stringgrid1.cells[0,1]:='0';
for i:=1 to nmax do
    begin
    v:=2;
    while v*i<=nmax do
    begin
    prim[i]:=0;
    v:=v+1;
    end
    end
end;

Noedel 7. Mär 2009 23:25

Re: Primzahlen Sieb
 
so wie ich das sehe, gibst du nichts aus, rechnest nur...

schöni 8. Mär 2009 00:18

Re: Primzahlen Sieb
 
Zitat:

Zitat von harryi

Delphi-Quellcode:
procedure TForm1.eratosthenes;
var prim:Array[1..100000]of Integer;          //Zahlen von 1 bis 250000
    i,v:integer;                              //i=Zahl

begin
prim[i]:=1;
stringgrid1.cells[0,1]:='0';
for i:=1 to nmax do
    begin
    v:=2;
    while v*i<=nmax do
    begin
    prim[i]:=0; //prim[i] ist gleich 0 statt v
    v:=v+1;
    end
    end
end;

Dem Array prim wird immer der Wert 0 zugewiesen. Weise den Wert v zu!

Ich habe jetzt den Primzahlalgo nicht im Kopf, weiß aber, das eine Primzahl nur durch 1 und durch sich selber ohne Rest teilbar ist. Daraus sollte sich ein Algo bauen lassen. Egal wie schnell der dann erst mal ist.

Mikescher 8. Mär 2009 08:16

Re: Primzahlen Sieb
 
Liste der Anhänge anzeigen (Anzahl: 1)
Und wenn du mal eine schnelle Möglichkeit brauchst (wirst du bei 250000 Zahlen wohl brauchen) könntest du den Sieb des Eratosthenes benutzen :zwinker:

Ich hab den au mal geschrieben und als Beispiel grad mal angehängt

MfG Mikescher

harryi 8. Mär 2009 11:02

Re: Primzahlen Sieb
 
Dankeschön, Prinzip sollte auch die von erastotenes werden^^

ich wende mich an euch, falls ich noch fragen habe,

harryi 8. Mär 2009 12:24

Re: Primzahlen Sieb
 
Ich kriege das mit der Input immer noch nicht hin.

Also mein Ziel ist es bei Spalte 1 die Nummerierung zu haben, Index vom Primzahl und dann rechts in der Spalte 2 dann meine Primzahl.

Delphi-Quellcode:
procedure TForm1.eratosthenes;
var prim:Array[1..100000]of Integer;          //Zahlen von 1 bis 100000
    i,v,nmax:integer;                         //i=Zahl
begin
nmax:=spinedit1.value;
for i:=2 to nmax do
    prim[i]:=1;
    v:=2;
    while v*i<=nmax do
    begin
    prim[i]:=0;
    v:=v+1;
    end;


for i:=1 to nmax do
  if prim[i]=1 then

Bei mir ist wenn prim[i]=1 eine Primzahl , alle die durch das v(Vielfachen) teilbar ist, werden nicht aufgelistet also prim[i]:=0.

Hilfe

Blup 9. Mär 2009 13:04

Re: Primzahlen Sieb
 
Zitat:

Zitat von harryi
Ich habe eigentlich alles verstanden, aber irgendwie will es nicht klappen.

Du hast vieleicht alles verstanden, aber nicht richtig umgesetzt.
Rück deinen Code mal ordentlich ein, dann siehst du vieleicht auch schon den ersten Fehler.

Delphi-Quellcode:
for i:=2 to nmax do
  prim[i]:=1;
Das Array wird ordentlich initialisiert, so weit so gut.

Fehler:
Delphi-Quellcode:
while v*i<=nmax do
begin
Die Variable i ist nach dem Schleifendurchlauf undefiniert, das müsste dir der Compiler an dieser Stelle auch melden.
Tatsächlich wird hier eine neue Schleife benötigt, in der für jede Zahl die eine Primzahl ist, das "Aussieben" erfolgt.

Richtig:
Delphi-Quellcode:
for i:=2 to nmax do
begin
  if prim[i] = 1 then
  begin
    v:=2;
    while v*i<=nmax do
    begin
Fehler:
Delphi-Quellcode:
prim[i]:=0;
Natürlich nicht i sondern v * i, das jeweilige vielfache der Primzahl ist keine Primzahl.

Richtig:
Delphi-Quellcode:
prim[v * i]:=0;


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