// https://godbolt.org/z/3hf7h67Pe
#include <iostream> // cout
#include <vector> // Container vector
#include <string> // stoi
int eingabeBis(int argc, const char* argv[]) {
/* Zahl ermitteln */
int bis = 0; // neue Variable einführen
if(argc<=1) { // if-Anweisung mit then- und else-Block
std::cout << "Bis wohin wollen Sie Primzahlen berechnen? ";
if(!(std::cin >> bis)) { // Prüfen des Rückgabewerts
return -1; // Fehler bei Benutzereingabe
}
} else { // else-Teil der if-Anweisung
bis = std::stoi(argv[1]);
}
return bis; // Eingabe zurückliefern
}
std::vector prims{2}; // neuer vector<int> mit Initialisierung
bool testeObPrim(int n) {
/* prims muss aufsteigend sortiert sein */
for(int teil : prims) { // bereichsbasierte for-Schleife
if(teil*teil > n) // zu groß, um überhaupt Teiler zu sein?
return true; // … dann innere Schleife vorzeitig beenden
if(n%teil==0) // ist Teiler?
return false; // … dann raus
}
return true; // kein Teiler gefunden
}
void berechnePrimsBis(int bis) {
/* Prims-Berechnung */
/* vector muss an dieser Stelle {2} enthalten */
for(int n=3; n<bis; n=n+2) { // Standard-for-Schleife
if(testeObPrim(n)) {
prims.push_back(n); // ist prim – merken als Teiler und Ergebnis
}
}
}
void ausgabePrims() {
for(int prim : prims) { // bereichsbasiert, über alle Elemente
std::cout << prim << " ";
}
std::cout << "\n";
}
int main(int argc, const char* argv[]) {
int bis = eingabeBis(argc, argv); // deklariert Variable
if(bis < 2) { return 1; } // Raus aus main mit Nicht-okay-Wert.
berechnePrimsBis(bis);
ausgabePrims();
return 0;
}