La suma de cuadrados de los primeros diez números es:
1² + 2² + ... + 10² = 385
El cuadrado de la suma es:
(1 + 2 + ... + 10)² = 55² = 3025
La diferencia es 3025 − 385 = 2640.
Encuentra la diferencia para los primeros 100 números naturales.
Dos cantidades diferentes
Es fácil confundir "suma de cuadrados" con "cuadrado de la suma". Son cosas muy distintas:
Verificando el ejemplo (n=10)
Suma de cuadrados
1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100 = 385
Suma de 1 a 10
1 + 2 + 3 + ... + 10 = 55
Cuadrado de la suma
55² = 3025
Diferencia
3025 − 385 = 2640 ✓
¿Por qué el cuadrado de la suma es mayor?
Al elevar la suma al cuadrado, obtenemos todos los productos cruzados 2×i×j
que no aparecen en la suma de cuadrados.
Conceptos clave
La estrategia
Calcular ambas cantidades por separado y restar. Simple y directo.
Variante A: while con contadores
Dos acumuladores, un bucle while. Muy explícita.
Variante B: for con range
Más pythónico usando for y range.
Variante C: dos bucles separados
Más claro: un bucle para cada cantidad. Menos eficiente pero más legible.
¿Cuál elegir?
| Variante | Bucles | Ventaja |
|---|---|---|
| A: while | 1 × 100 | Muy explícita |
| B: for único | 1 × 100 | Compacta |
| C: for separados | 2 × 100 | Más clara |
Conceptos clave
i ** 2
Exponenciación. En Python, ** es el operador de potencia. i ** 2 es i².
suma += i
Asignación aumentada. Equivale a suma = suma + i. Más conciso.
range(1, 101)
Genera 1, 2, 3... 100. El segundo argumento es exclusivo (no incluye el 101).
Conceptos de Python aprendidos
sum() con generadores
Python tiene sum() integrado. Combinado con generadores, el código es muy expresivo.
Desglose
sum(range(1, n + 1))
sum() acepta cualquier iterable. range() es iterable. Suma 1+2+...+n directamente.
sum(i ** 2 for i in range(...))
Generator expression. Calcula i² para cada i y los suma. Sin crear lista intermedia.
Versión ultra-compacta:
sum(range(1,101))**2 - sum(i**2 for i in range(1,101))
Conceptos aprendidos
Fórmulas cerradas
Existen fórmulas matemáticas para calcular ambas sumas sin iterar.
Verificando con n=10
Suma = 10 × 11 / 2 = 55 ✓
Cuadrado: 55² = 3025
Suma de cuadrados = 10 × 11 × 21 / 6 = 385 ✓
2n+1 = 21 cuando n = 10
Diferencia = 3025 − 385 = 2640 ✓
Coincide con el enunciado
Comparativa de rendimiento
| Método | n = 100 | n = 10⁹ | Complejidad |
|---|---|---|---|
| Bucle | 100 ops | 10⁹ ops | O(n) |
| Fórmula | 5 ops | 5 ops | O(1) |