Problema
Somma i divisori positivi di n che sono strettamente minori di n. Se la loro somma è uguale a n, il numero è perfetto. Se la somma è maggiore, è abbondante; se è minore, è deficiente. Il numero 1 non ha divisori propri positivi, quindi la somma dei suoi divisori è 0.
Implementa perfect_number(n).
Input
n: L'intero positivo da classificare.
Output
Restituisci perfect, abundant o deficient come testo minuscolo.
Vincoli
1 ≤ n ≤ 1.000.000. Valori zero e negativi sono esclusi.
Esempi
Input:
n = 18
Output atteso:
expected = "abundant"
Input:
long long n = 18;
Output atteso:
std::string expected = "abundant";
Input:
long n = 18;
Output atteso:
string expected = "abundant";
Spiegazione
I divisori propri sono 1, 2, 3, 6 e 9. La loro somma è 21, maggiore di 18.
Input:
n = 28
Output atteso:
expected = "perfect"
Input:
long long n = 28;
Output atteso:
std::string expected = "perfect";
Input:
long n = 28;
Output atteso:
string expected = "perfect";
Spiegazione
La somma dei divisori propri è 1 + 2 + 4 + 7 + 14 = 28, esattamente il numero stesso.
Come affrontarlo
Prova prima da solo, poi apri un suggerimento alla volta.
Suggerimento 1
Trova i divisori propri di n e confronta la loro somma con n per decidere la classe.
Suggerimento 2
Ti basta cercare i divisori fino alla radice quadrata, accoppiando ogni divisore con il suo complemento.
Suggerimento 3
Tratta 1 con attenzione, perché non ha divisori positivi propri e la sua somma dei divisori è zero.
Complessità attesa
tempo O(√n), spazio aggiuntivo O(1)
Riferimenti
Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.