Prim­zah­len

int EingabeMax = 1000;

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

  // auf serielle Verbindung warten
  while (!Serial) ;
  delay(1000);

  Serial.println("Zahl eingeben:");
  Serial.println("Maximum ist: " + String(EingabeMax) + "!");
}

void loop() 
{
  while (Serial.available() > 0) 
  {
    int Zahl = Serial.parseInt();

    // Enter/Senden gedrückt
    if (Serial.read() == '\n') 
    {
      // 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(Zahl));
        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: Nov 5, 2024 @ 10:20