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;
}
}
Letzte Aktualisierung: