Prim­zah­len

int Zahl;
int EingabeMax = 1000;

void setup()
{
  Serial.begin(9600);

  // auf serielle Verbindung warten
  while (!Serial) {;}
  Serial.println("Zahl eingeben:");
  Serial.println("Maximum ist: " + String(EingabeMax) + "!");
}

void loop()
{
  String Eingabe;
  while (Serial.available() > 0)
  {
    // solange lesen, bis return \n eingegeben wurde
    Eingabe = Serial.readStringUntil('\n');

    // das letzte Zeichen ist return → soll entfernt werden
    Eingabe = Eingabe.substring(0, Eingabe.length() - 1);

    // eingegebene Eingabe zu int umwandeln
    Zahl = Eingabe.toInt();

    // nur ausführen wenn Zahl < 1000
    // -> ansonsten ist die Rechenzeit zu lang
    if (Zahl <= EingabeMax)
    {
      int ZaehlerZeile = 0;
      Serial.println("----------------------------------------------");
      Serial.println("Primzahlen bis " + String(Eingabe)) ;
      for (int i = 2 ; i < Zahl; i++)
      {
        // Primzahl suchen -> Funktion aufrufen
        bool Suche = Primzahl(i);
        // Primzahl gefunden -> Suche = true
        if (Suche)
        {
          ZaehlerZeile++;

          // 10 Zahlen pro Zeile
          if (ZaehlerZeile % 10 == 0) Serial.println(String(i) + "," ) ;
          else Serial.print(String(i) + "," + '\t') ;
        }
      }
      Serial.println("\n---------------------------------------------");
      Serial.println(String(ZaehlerZeile) + " Primzahlen gefunden!");
    }

    else Serial.println("Die Eingabe ist >1000");
  }
}

bool Primzahl(int Zahl)
{
  // nur bis zur Hälfte der Eingabe prüfen
  for (int i = 2 ; i <= Zahl / 2; i++)
  {
    // Teilbarkeit mit modulo testen
    // wenn kein Rest → Eingabe ist teilbar → false zurückgeben
    if (Zahl % i == 0) return false;
  }
  
  // keine Teiler gefunden → Primzahl = true zurückgeben
  return true;
}

Letzte Aktualisierung: 25. Jul 2023 @ 11:24