Modernes C++ programmieren

Okt 23, 2024

lst-0358-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/KGn9ob8on 
#include <iostream>
#include <array>
constexpr bool isPrime(int n) { // zur Übersetzungszeit berechenbar
  if(n < 2) return false; // 0, 1 sind nicht prim
  for (int i = 2; i*i <= n; i += i>2 ? 2 : 1) { // 2,3,5,7,9,11,13,15…
    if (n % i == 0) return false;
  }
  return n > 1; // für 0 und 1
}
template<int Num>
consteval std::array<int, Num> primeNumbers() { // nur zur Übersetzungszeit
  std::array<int, Num> primes{};
  int idx = 0;
  for (int val = 1; idx < Num; ++val) {
    if (isPrime(val)) primes[idx++] = val;
  }
  return primes;
}
int main() {
  // Initialisiere mit Primzahlen
  auto primes = primeNumbers<100>();  // 1000000 geht nicht
  for (auto v : primes) {
    std::cout << v << ' ';
  }
  std::cout << '\n';
}