primzahlencode



  • hi leute, ich will ein ganz einfaches programm schreiben, das mir automatisch alle primzahlen von 2 bis 98 ausgibt. nun gibt er mir auch alle richtigen an, aber hinzu kommen 35, 87 und 95... das sind, wie man weiß, keine primzahlen. irgendwie komme ich einfach nicht auf den fehler! pls help 😞

    int n=2;
    int t;

    while(n<98) { //bis 98!
    t=2;
    while(t<n) {
    if(n%t==0) { //wenn rest 0, gehe sofort ein n weiter!
    if(n<100){
    n++;
    }
    }
    t++;
    }
    printf("%i ist eine Primzahl\n",n); //wenn kein rest, dann primz.!
    n++;
    }



  • Wenn du einen Teiler gefunden hast, gehst du ja zur nächsten Zahl weiter, allerdings werden für diese die ersten Teiler nicht mehr überprüft. Besser ist es, an der Stelle die innere Schleife komplett zu verlassen (Stichwort: break).

    PS: Und deine while()-Schleifen würden als for() wesentlich übersichtlicher aussehen

    PPS: sfds



  • Stimmt Cstoll, so ist das natürlich viel übersichtlicher, danke. Hab mich schon gefragt, wie das genau geht. Nun, verschönert und mit for schleifen sieht der code dann jetzt so aus.(35,87,95 werden leider auch angezeigt.)

    Und zu deiner Lösung: Doch, die ersten teiler werden noch überprüft.
    das t=2 wird doch jedesmal neu initialisiert. und das mit dem break ändert leider nichts, habs versucht. hmmm.... 😕

    int n;
        int t;
    
        for(n=2; n<98; n++){
           for(t=2; t<n; t++){
              if(n%t==0){
                 if(n<100){
                 n++;
                 }               
              }
           }
           printf("%i ist eine Primzahl\n",n);
        }
    


  • Änder mal Zeile 9 in:
    n++; t = 1;
    Wird dir jetzt klar, wo dein Denkfehler ist?

    void prims(int start, int end)
    {
      int i;
      if (start < 2)
        start = 2;
      if (end < 2)
        end = 2;
      for (; start < end; ++start)
      {
        for (i = 2; i < start; ++i)
        {
          if (start % i == 0)
            break;
        }
        if (start == i)
          printf("%i\n", start);
      }
    }
    


  • jo, wurde sofort^^ danke und danke an cstoll, ist wahrscheinlich das, was du auch gemeint hast. hehe, immer diese anfängerfehler, war schon am verzweifeln xD



  • lucbossman schrieb:

    Stimmt Cstoll, so ist das natürlich viel übersichtlicher, danke. Hab mich schon gefragt, wie das genau geht. Nun, verschönert und mit for schleifen sieht der code dann jetzt so aus.(35,87,95 werden leider auch angezeigt.)

    Und zu deiner Lösung: Doch, die ersten teiler werden noch überprüft.
    das t=2 wird doch jedesmal neu initialisiert. und das mit dem break ändert leider nichts, habs versucht. hmmm.... 😕

    t=2 wird allerdings erst dann initialisiert, wenn du einmal bis zum aktuellen Wert von n durchgelaufen bist. Wenn du mitten in der Schleife n erhöhst, wird der Wert nicht wieder zurückgesetzt.



  • jo denkfehler, und thx for help 🙂


Anmelden zum Antworten