Brauche Hilfe um das Programm zu verstehen



  • Hallo liebe Community,

    ich würde euch gerne bitten mir ein Teil folgendes Programm zu erklären 🙂 .
    Bin noch ein blutiger Anfänger ;).

    // Die Primzahlen zwischen 1 und 100 zu ermitteln.
    
    #include <iostream>
    using namespace std;
    
    int main() {   
      int i, j;
      bool isprime;
    
      for(i=1; i < 100; i++) {
        isprime = true; 
    
        // prüfen, ob die Zahl gerade ist
        [b]for(j=2; j <= i/2; j++)[/b]
          // falls ja, ist sie keine Primzahl
          [b]if((i%j) == 0) isprime = false;[/b]
    
        if(isprime)
          cout << i << " ist eine Primzahl.\n";
      }
       cin.get();
    }
    

    Wäre super nett von euch, wenn ihr mir die fett gedruckte Stelle erklären könntet :).

    Mit freundlichen Grüßen
    Momchilo



  • Hi,

    in der fetten Schleife wird die Zahl in i durch alle Zahlen zwischen 2 und i/2 geteilt, mit Rest. D.h. wenn der Rest 0 ist, konnte die Zahl in i durch irgendeine natrüliche Zahl voll geteilt werden und ist deshalb keine Primzahl.

    BSP:
    i = 15

    j= 2 -> i%j = 1
    j= 3 -> i%j = 0 -> 15 ist durch 3 teilbar, also keine Primzahl.

    i= 11

    j= 2 -> i%j = 1
    j= 3 -> i%j = 2
    j= 4 -> i%j = 3
    j= 5 -> i%j = 4

    11 ist also Primzahl, da keine natürliche Zahl zwischen 2 und 6 gefunden werden konnte, die 11 ohne Rest teilt.

    Durch 6 wird nicht mehr geteilt, da das größer ist als i/2. Macht ja auch keinen Sinn, wenn du durch was größeres als die Hälfte teilst, kommt irgendwas <2 raus, aber keine Primzahl.

    gruß
    Martin



  • Hallo Martin,

    Vielen Dank für diese ausfürliche Beschreibung.
    Ich wäre nie auf die Idee gekommen, dass die innere for-Schleife bei jeder Zahl komplett durchlaufen wird. Dachte insgesamt nur einmal ;). Doofer Denkfehler von mir 🙄 . So macht das ganze natürlich auch Sinn 😋 .
    Dankeschön 🙂

    Euer
    Momchilo


Anmelden zum Antworten