Sieb des Eratosthenes Fehler?

3 Antworten

MAX kann man auch auf 1000 setzen, da dies keine Primzahl ist.

das Auslesen ist falsch, wie ralphdieter schon gesehen hat (siehe Korrektur unten, statt dessen ginge auch in for i=4;i<(MAX+2), das wäre aber kein guter Code)

for (i=2;i<MAX;i++)                 
  {
    if ( natzahl[i])
    {
        cout << " " << natzahl[i] ;

    }
  }

natzahl[] ist ja bereits bool, da muss man nicht noch einen bool mit  "!=false" konstruieren.

Weitere Fehler sehe ich nicht, ich habe es gerade mit VBA ausprobiert:

Sub x()
 Dim a(1000) As Boolean
 Dim x, x1, x2, c As Integer
 
 
 For x = 2 To 1000
    a(x) = True
 Next
 
 For x1 = 2 To 1000
  For x2 = (x1 * 2) To 1000 Step x1
   a(x2) = False
  Next
 Next
 
 c = 1
   
 For x = 2 To 1000
  If a(x) Then
   Cells(c, 1).Value = x
   c = c + 1
  End If
 Next
 
 
End Sub

Du rechnest richtig und gibst dann falsche Werte aus :-)

Lass die -2 bei der Indizierung einfach weg!

Was bei dir genau falsch ist weiss ich net, ist mir jetzt zu spät, falls du aber einen (kleinen) primzahlenrechner ansehen möchtest (zur hilfe):

Code - (programmieren, cplusplus, Sieb des Erathosthenes)

Beachte bitte, der Code war länger habe etwas gekürzt und mich auf die berechnung und das abspcierhn beschränkt. manche variablen wie primzahlvorherig oder e sind überflüssig

0

Was möchtest Du wissen?