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 = 15j= 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 = 411 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