Studium, Ausbildung und Beruf
 StudiumHome   FAQFAQ   RegelnRegeln   SuchenSuchen    RegistrierenRegistrieren   LoginLogin

C++ Anfänger, Primzahl-Programm
Neues Thema eröffnen   Neue Antwort erstellen
Foren-Übersicht -> Informatik-Forum -> C++ Anfänger, Primzahl-Programm
 
Autor Nachricht

Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 05.06.2005
Beiträge: 1151
Wohnort: München

BeitragVerfasst am: 09 Feb 2010 - 18:36:04    Titel: C++ Anfänger, Primzahl-Programm

Ich versuche mich seit kurzer Zeit an C++ und hab nun ein Programm geschrieben, mit dem ich mir eigentlich alle Primzahlen bis 100 auflisten lassen wollte, doch das funktioniert leider nicht so, wie ich es möchte. Die 1 und die 2 hab ich direkt außen vorgelassen, weil mir keine Möglichkeit einfällt, die beiden Zahlen in die Berechnung mit hinein zu bekommen. Hier erstmal das Programm:

#include <iostream>
using namespace std;
int main()
{
int x, i;

for(x=3; x<=100; x++) {
for(i=2; i<x; i++) {
if(x%i==0) break;
if(x%(x-1)!=0) cout << x << " ist prim.\n";
}
}
return 0;
}

Ich hab also versucht, mit einer Schleife alle Zahlen von 3 bis 100 durchlaufen zu lassen und mit der zweiten Schleife wollte ich jede Zahl durch alle Zahlen teilen, die kleiner sind als sie selbst. Wenn sie sich nicht ohne Rest teilen lässt, ist sie ja schließlich prim. Ich weiß, das ist bestimmt nicht sehr elegant und wirkt eher wie ne Hau-drauf Methode, aber meine Programmierkenntnisse sind noch sehr begrenzt.

Nun meine Frage, wo liegt der Fehler in meinem Programm? Oder ist der Fehler prinzipieller Natur? Muss ich an das Problem anders rangehen?


EDIT: Kann es sein, dass es an der Zeile

if(x%(x-1)!=0) cout << x << " ist prim.\n";

liegt? Das führt er einfach jedes Mal aus, auch wenn i noch gar nich bis x-1 durchgelaufen ist oder? Wie kann ich das denn anders formulieren, damit es stimmig ist?
Annihilator
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 18.05.2007
Beiträge: 6395
Wohnort: (hier nicht mehr aktiv)

BeitragVerfasst am: 09 Feb 2010 - 19:22:20    Titel:

Code:

#include <stdio.h>

int main()
{
  int x, i;
  for (x = 3; x <= 100; x++)
  {
    for (i = 2; i < x; i++)
    {
      if (x%i == 0) break;
    }
    if (i == x) printf("%i ist eine Primzahl.\n", x);
  }
  return 0;
}

_________________
Schnauze voll von Error 500 und co?
bildungs-foren.de

Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 05.06.2005
Beiträge: 1151
Wohnort: München

BeitragVerfasst am: 09 Feb 2010 - 19:54:02    Titel:

Ah natürlich. Das klingt logisch. Vielen Dank.

Aber eine neue Frage stellt sich mir da noch. Wenn im for loop die Bedingung i < x angegeben ist, wie kann denn dann innerhalb des Loops die Bedingung i==x erfüllt sein? Soweit sollte i doch gar nicht durchlaufen oder?

EDIT: Hat sich erledigt. Hab mir das nochmal genau angeguckt. i==x ist ja gar nicht innerhalb des Loops. Vielen Dank nochmal Smile
CNlerin
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 17.08.2008
Beiträge: 692

BeitragVerfasst am: 10 Feb 2010 - 00:15:21    Titel:

Nur so als Tipp...
Nach dem Primzahlen, von der 2 mal abgesehn, immer ungerade sind würde ich in der ersten for schleife auch nur jede ungerade Zahl prüfen Wink

for (x = 3; x <= 100; x=x+2){
...
}
Annihilator
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 18.05.2007
Beiträge: 6395
Wohnort: (hier nicht mehr aktiv)

BeitragVerfasst am: 10 Feb 2010 - 11:47:48    Titel:

Begründung?
_________________
Schnauze voll von Error 500 und co?
bildungs-foren.de
Jockelx
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 24.06.2005
Beiträge: 3255

BeitragVerfasst am: 10 Feb 2010 - 14:28:29    Titel:

Annihilator hat folgendes geschrieben:
Begründung?

Wofür? Das Primzahlen grösser 2 alle ungerade sind!?
Annihilator
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 18.05.2007
Beiträge: 6395
Wohnort: (hier nicht mehr aktiv)

BeitragVerfasst am: 10 Feb 2010 - 19:03:44    Titel:

Toll! Primzahlen größer 3 sind auch alle nicht durch 3 teilbar. Und stell dir vor: Die, die größer als 5 sind, sind auch nicht durch 5 teilbar!
_________________
Schnauze voll von Error 500 und co?
bildungs-foren.de
Jockelx
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 24.06.2005
Beiträge: 3255

BeitragVerfasst am: 10 Feb 2010 - 20:17:31    Titel:

Dass Primzahlen > 2 nicht durch 2 teilbar sind, ist offensichtlich und lässt sich
in der Schleife einfach umsetzen.
Dass Primzahlen > 15349851 nicht durch 15349851 teilbar sind, stimmt auch, interessiert aber keinen.

Also nochmal: Was willst du warum begründet haben?
Annihilator
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 18.05.2007
Beiträge: 6395
Wohnort: (hier nicht mehr aktiv)

BeitragVerfasst am: 10 Feb 2010 - 20:59:15    Titel:

Dass man das Programm optimieren kann, steht meines Erachtens außer Frage. Schwierig umzusetzen, ist die Sache für 3 auch nicht:

Code:

x = ((x+2)%3) ? x+2 : x+4


Ich fand es jedenfalls überflüssig zu erwähnen, denn wenn man das weiter spinnt, dann benötigt man erstmal alle Primzahlen, um zu wissen, welche x man überspringen kann.
_________________
Schnauze voll von Error 500 und co?
bildungs-foren.de
CNlerin
Senior Member
Benutzer-Profile anzeigen

Anmeldungsdatum: 17.08.2008
Beiträge: 692

BeitragVerfasst am: 10 Feb 2010 - 21:25:35    Titel:

Annihilator hat folgendes geschrieben:
Dass man das Programm optimieren kann, steht meines Erachtens außer Frage. Schwierig umzusetzen, ist die Sache für 3 auch nicht:

Code:

x = ((x+2)%3) ? x+2 : x+4


Ich fand es jedenfalls überflüssig zu erwähnen, denn wenn man das weiter spinnt, dann benötigt man erstmal alle Primzahlen, um zu wissen, welche x man überspringen kann.


Naja wenn du die primzahlen schon kennst brauchst ja kein programm mehr. Aber wenn ich die anzahl der zahlen die überhaupt in frage kommen können schon von vornherein auf die hälfte reduzieren kann, macht das meiner meinung nach durch aus sinn.

Ich sagte ja nicht das deine lösung falsch ist, und bei 100 Zahlen spielt das sicher auch nicht so die rießen rolle, aber das ist so simpel das man das einfach so mal machen kann ohne viel hirnschmalz rein stecken zu müssen.
Beiträge der letzten Zeit anzeigen:   
Foren-Übersicht -> Informatik-Forum -> C++ Anfänger, Primzahl-Programm
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

Chat :: Nachrichten:: Lexikon :: Bücher :: Impressum