bool Stopp = true; void setup() { // Seriellen Monitor starten Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} Serial.println("Die ersten 4 vollkommenen Zahlen:"); Serial.println("---------------------------------"); } bool Primzahl(float Zahl) { // zum Testen nach int umwandeln int PruefZahl = round(Zahl); // nur bis zur Hälfte der Eingabe prüfen for (int i = 2 ; i <= PruefZahl / 2 ; i++) { // Teilbarkeit mit modulo testen // wenn kein Rest → Eingabe ist teilbar → false zurückgeben if (int(PruefZahl) % i == 0) return false; } // keine Teiler gefunden -> Primzahl = true zurückgeben return true; } void loop() { while (Stopp) { /* eine vollkommene Zahl ist die Summe ihrer Teiler (ausgenommen 1 und die Zahl selbst) die ersten 4 vollkommenen Zahlen */ for (int i = 2; i < 8; i++) { /* Formel zur Berechnung: 2^(i-1) * (2^i - 1) wobei der Wert des Terms (2^i) - 1 eine Primzahl sein muss */ // Wert des Terms pow(2, i) - 1 auf Primzahl untersuchen bool Suche = Primzahl(pow(2, i) - 1); // der Wert des Terms ist eine Primzahl (Suche = true) // -> vollkommene Zahl gefunden if (Suche) { // Ergebnis ist eine Zahl vom Typ float -> muss gerundet werden Serial.println(round(pow(2, (i - 1)) * (pow(2, i) - 1))); } } Serial.println("------------------------------------"); Stopp = false; } }