Primzahlen in C und C++ prüfen
In dieser Lektion prüfst du, ob eine ganze Zahl eine Primzahl ist, indem du Teiler bis zu ihrer Quadratwurzel testest.
Einführung
Eine Primzahl ist größer als 1 und nur durch 1 und sich selbst teilbar. Um das zu prüfen, teilen wir die Zahl durch kleinere Zahlen. Es reicht aber, bis zur Quadratwurzel der Zahl zu testen, was das Programm deutlich schneller macht.
Wichtige Punkte
- Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
- Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
- Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.
Codebeispiele in C und C++
#include <stdio.h>
int main(void) {
int number = 29, prime = number > 1;
// A composite number has a factor no larger than its square root.
for (int divisor = 2; divisor * divisor <= number; ++divisor)
if (number % divisor == 0) { prime = 0; break; }
printf("%d is %sprime\n", number, prime ? "" : "not ");
}
29 is prime
#include <iostream>
int main() {
int number = 29;
bool prime = number > 1;
// Stop after the square root and on the first divisor.
for (int divisor = 2; divisor * divisor <= number && prime; ++divisor)
prime = number % divisor != 0;
std::cout << number << " is " << (prime ? "" : "not ") << "prime\n";
}
29 is prime
C und C++ im Vergleich
Die Schleife läuft nur, solange divisor * divisor <= number gilt, denn hat die Zahl einen Teiler größer als die Quadratwurzel, gehört dazu ein kleinerer Teiler, der schon geprüft wurde. Sobald ein Teiler gefunden ist, verlässt die C-Version die Schleife mit break, die C++-Version endet dank der Bedingung && prime. Das Ergebnis zeigt, dass 29 eine Primzahl ist.
C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.
C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.
Übungen zur Vertiefung
Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.
- Teste ungültige Eingaben und Grenzwerte.
- Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
- Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Primzahl-Prüfung Entscheide, ob eine Zahl eine Primzahl ist. Einfach
- Primzahlen mit einem Sieb auflisten Finde Primzahlen bis zu einem Grenzwert, indem zusammengesetzte Vielfache markiert werden. Mittel