Problema
Suma los divisores positivos de n que sean estrictamente menores que n. Si su suma es igual a n, el número es perfecto. Si la suma es mayor, es abundante; si es menor, es deficiente. El número 1 no tiene divisores positivos propios, así que la suma de sus divisores es 0.
Implementa perfect_number(n).
Entrada
n: El entero positivo a clasificar.
Salida
Devuelve perfect, abundant o deficient en minúsculas.
Restricciones
1 ≤ n ≤ 1,000,000. Se excluyen valores cero y negativos.
Ejemplos
Entrada:
n = 18
Salida esperada:
expected = "abundant"
Entrada:
long long n = 18;
Salida esperada:
std::string expected = "abundant";
Entrada:
long n = 18;
Salida esperada:
string expected = "abundant";
Explicación
Los divisores propios son 1, 2, 3, 6 y 9. Su suma es 21, mayor que 18.
Entrada:
n = 28
Salida esperada:
expected = "perfect"
Entrada:
long long n = 28;
Salida esperada:
std::string expected = "perfect";
Entrada:
long n = 28;
Salida esperada:
string expected = "perfect";
Explicación
La suma de los divisores propios es 1 + 2 + 4 + 7 + 14 = 28, exactamente el mismo número.
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
Encuentra los divisores propios de n y compara su suma con n para decidir la clase.
Pista 2
Solo necesitas buscar divisores hasta la raíz cuadrada, emparejando cada divisor con su compañero.
Pista 3
Trata 1 con cuidado, porque no tiene divisores positivos propios y la suma de sus divisores es cero.
Complejidad esperada
tiempo O(√n), espacio extra O(1)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.