Problem
Addiere die positiven Teiler von n, die strikt kleiner als n sind. Ist ihre Summe gleich n, ist die Zahl vollkommen. Ist die Summe größer, ist sie überschüssig; ist sie kleiner, ist sie mangelhaft. Die Zahl 1 hat keine echten positiven Teiler, daher ist ihre Teilersumme 0.
Implementiere perfect_number(n).
Eingabe
n: Die zu klassifizierende positive ganze Zahl.
Ausgabe
Gib perfect, abundant oder deficient als Kleinbuchstaben zurück.
Einschränkungen
1 ≤ n ≤ 1.000.000. Null und negative Werte sind ausgeschlossen.
Beispiele
Eingabe:
n = 18
Erwartete Ausgabe:
expected = "abundant"
Eingabe:
long long n = 18;
Erwartete Ausgabe:
std::string expected = "abundant";
Eingabe:
long n = 18;
Erwartete Ausgabe:
string expected = "abundant";
Erläuterung
Die echten Teiler sind 1, 2, 3, 6 und 9. Ihre Summe ist 21, was größer als 18 ist.
Eingabe:
n = 28
Erwartete Ausgabe:
expected = "perfect"
Eingabe:
long long n = 28;
Erwartete Ausgabe:
std::string expected = "perfect";
Eingabe:
long n = 28;
Erwartete Ausgabe:
string expected = "perfect";
Erläuterung
Die echten Teiler ergeben 1 + 2 + 4 + 7 + 14 = 28, genau die Zahl selbst.
So gehst du vor
Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.
Hinweis 1
Finde die echten Teiler von n und vergleiche ihre Summe mit n, um die Klasse zu bestimmen.
Hinweis 2
Du musst nur Teiler bis zur Quadratwurzel suchen und jeden Teiler mit seinem Gegenstück paaren.
Hinweis 3
Behandle 1 sorgfältig, denn es hat keine echten positiven Teiler und die Summe seiner Teiler ist 0.
Erwartete Komplexität
Zeit O(√n), zusätzlicher Speicher O(1)
Referenzen
Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.