Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Primzahlen suchen mit C++ Programm

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.01.2014, 14:34 Uhr
Laubsammler



Hallo zusammen

Wir haben versucht ein kleines Programm zu schreiben, welches uns die Primzahlen in einem bestimmten Bereich herausgibt. Im Gegensatz zu unserem Dozent wollen wir so viele Boolean Anweisungen wie möglich vermeiden.
Das Programm funktioniert, jedoch mit einem kleinen Fehler den wir nicht beheben können. Beispielsweise sagt es uns, dass die Nummer 21 ebenfalls eine Primzahl ist. Weiss jemand von euch, wie wir mit einer zusätzlichen Bedingung/Anweisung dieses Problem umgehen können (wie gesagt, möglichst ohne bool...)?
Danke schon mal im Voraus


C++:
////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>      //including header file input-output-directory

using namespace std;    //standard line

int Nmax = 100;         //maximum limite of primes

int main() {
    for (int i=2; i<=Nmax; i++){     //first loop: for scanning each number from 2 to 20 for primes
        for (int n=2; n<i; n++) {    //second loop: searching a divisor of the searched prime
            if (i%n!=0){             //condition: if the division of i and n have a rest...
                cout << i << "is a prime!" << endl;   //...this digit will be printet out
            }
        break;          //stop the loop after a) found a digit for i b) let the if-statement out
        }
    }
return 0;
}



----
Edit: cpp-Tags und oberste Kommentarzeile eingefügt

Dieser Post wurde am 30.01.2014 um 14:53 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.01.2014, 15:44 Uhr
ao

(Operator)



Zitat:
Das Programm funktioniert, jedoch mit einem kleinen Fehler

Das Programm findet alle Primzahlen, insofern funktioniert es tatsächlich. Der "kleine" Fehler ist: Es "findet" auch alle anderen ungeraden Zahlen und jubelt sie euch als prim unter. Aber ihr habt das schön gesagt

Erstens, das break gehört da nicht hin. Ihr brecht die innere Schleife IMMER nach dem ersten Durchlauf ab, d.h. ihr testet immer nur n=2.

Zweitens, eure Logik ist falsch. Eine Zahl ist eine Primzahl, wenn KEINE der Divisionen aufgeht, und nicht, wie in eurer Schleife, wenn IRGENDEINE der Divisionen nicht aufgeht. Letzteres ist bei jeder natürlichen Zahl N der Fall, wenn man sie durch etwas teilt, was größer ist als N/2.

Ich hab hier ein Beispielprogramm, das mit EINER boolschen Variablen auskommt. Vielleicht würde man die auch noch wegkriegen, aber ich fürchte, das ginge schwer auf Kosten der Lesbarkeit. Wenn ihr wollt, poste ich es, aber ich will euch den Sport nicht verderben ...

Dieser Post wurde am 30.01.2014 um 15:45 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.04.2014, 02:23 Uhr
Yadgar



Hi(gh)!

Hier meine Version:


C++:
#include <iostream>
using namespace std;

int main()
{
  unsigned short n=100, i=1, c=2, j;
  bool prime;
  
  while (i <= n)
  {
    j = 1;
    prime = true;
    while (j*j <= c)
    {
      if (j != 1 && c%j == 0)
      {  
        prime = false;
        break;
      }
      j++;
    }
    if (prime)
    {
      cout << c << endl;
      i++;
    }
    c++;
  }
  return 0;
}



Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.04.2014, 02:28 Uhr
Yadgar



Hi(gh)!

...und hier ohne bool:


C++:
#include <iostream>
using namespace std;

int main()
{
  unsigned short n=100, i=1, c=2, j;

  while (i <= n)
  {
    j = 1;
    while (j*j <= c)
    {
      if (j != 1 && c%j == 0) break;
      j++;
    }
    if (j*j > c)
    {
      cout << c << endl;
      i++;
    }
    c++;
  }

  return 0;
}



Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: