AGB  ·  Datenschutz  ·  Impressum  







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

Primzahlen Sieb

Ein Thema von harryi · begonnen am 8. Mär 2009 · letzter Beitrag vom 9. Mär 2009
Antwort Antwort
harryi

Registriert seit: 29. Sep 2008
14 Beiträge
 
#1

Primzahlen Sieb

  Alt 8. Mär 2009, 00:12
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;
  Mit Zitat antworten Zitat
Noedel
(Gast)

n/a Beiträge
 
#2

Re: Primzahlen Sieb

  Alt 8. Mär 2009, 00:25
so wie ich das sehe, gibst du nichts aus, rechnest nur...
  Mit Zitat antworten Zitat
schöni

Registriert seit: 23. Jan 2005
Ort: Dresden
445 Beiträge
 
Delphi 7 Personal
 
#3

Re: Primzahlen Sieb

  Alt 8. Mär 2009, 01:18
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.
Damit der Topf nicht explodiert, lässt man es ab und zu mal zischen.
  Mit Zitat antworten Zitat
Benutzerbild von Mikescher
Mikescher

Registriert seit: 3. Jun 2008
Ort: Offenburg
265 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Primzahlen Sieb

  Alt 8. Mär 2009, 09:16
Und wenn du mal eine schnelle Möglichkeit brauchst (wirst du bei 250000 Zahlen wohl brauchen) könntest du den Sieb des Eratosthenes benutzen

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

MfG Mikescher
Angehängte Dateien
Dateityp: zip sieb_des_eratosthenes_103.zip (405,9 KB, 32x aufgerufen)
Mike
Operation gelungen, Patient tot.

http://www.mikescher.com
  Mit Zitat antworten Zitat
harryi

Registriert seit: 29. Sep 2008
14 Beiträge
 
#5

Re: Primzahlen Sieb

  Alt 8. Mär 2009, 12:02
Dankeschön, Prinzip sollte auch die von erastotenes werden^^

ich wende mich an euch, falls ich noch fragen habe,
  Mit Zitat antworten Zitat
harryi

Registriert seit: 29. Sep 2008
14 Beiträge
 
#6

Re: Primzahlen Sieb

  Alt 8. Mär 2009, 13:24
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
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#7

Re: Primzahlen Sieb

  Alt 9. Mär 2009, 14:04
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:prim[i]:=0; Natürlich nicht i sondern v * i, das jeweilige vielfache der Primzahl ist keine Primzahl.

Richtig:prim[v * i]:=0;
  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 19:21 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