Suma de Divisores - FreeCodeCamp #138 Daily Challenge
2 min
Enunciado: Suma de Divisores
Dado un número entero positivo , devuelve la suma de todos sus divisores (enteros que dividen a sin dejar resto).
Por ejemplo, para , los divisores son y la suma es .
Ejemplos:
sumOfDivisors(6)→sumOfDivisors(13)→sumOfDivisors(28)→sumOfDivisors(84)→sumOfDivisors(549)→sumOfDivisors(9348)→
Análisis y Casos de Prueba
Para resolver el problema, basta con identificar todos los divisores de (es decir, todos los tales que ) y sumarlos. Veamos algunos casos:
| n | Divisores | Suma |
|---|---|---|
| 6 | 1, 2, 3, 6 | 12 |
| 13 | 1, 13 | 14 |
| 28 | 1, 2, 4, 7, 14, 28 | 56 |
| 84 | 1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84 | 224 |
| 549 | 1, 3, 9, 61, 183, 549 | 806 |
| 9348 | 1, 2, 3, 4, 6, 12, 13, 26, 39, 52, 78, 156, 59, 118, 177, 236, 354, 708, 779, 1558, 2337, 3116, 4674, 9348 | 23520 |
Estos ejemplos cubren casos pequeños, primos, compuestos y un valor grande para validar eficiencia.
Solución y Explicación
Estrategia
Usamos un enfoque directo: iterar de a y sumar los valores que dividen a exactamente. Es simple, claro y suficiente para los tamaños de entrada del reto.
Diagrama de Flujo
flowchart TD
A["Entrada: n"] --> B["Inicializar suma = 0"]
B --> C["Iterar i = 1 a n"]
C --> D{"n % i == 0?"}
D -- Sí --> E["suma += i"]
D -- No --> C
E --> C
C --> F["Fin del bucle"]
F --> G["Devolver suma"]
Código en JavaScript
Código Final
function sumOfDivisors(n) {
let suma = 0
for (let i = 1; i <= n; i++) {
if (n % i === 0)
suma += i
}
return suma
}Complejidad
- Tiempo: (una iteración por cada número hasta ).
- Espacio: (solo variables escalares).
Casos Edge y Consideraciones
- Si , el único divisor es (la función debe devolver ).
- El enunciado asume positivo.
- Para primos, la suma es .
- No se consideran negativos ni cero.
Reflexiones y Aprendizajes
- El operador módulo es clave para identificar divisores.
- Para grandes, se puede optimizar iterando hasta y sumando ambos divisores, logrando .
- La versión actual es didáctica y clara para quienes inician.