Suma vs cuadrado

Cargando Python...

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:

Suma de cuadrados
1² + 2² + 3²
= 1 + 4 + 9 = 14
Cuadrado de la suma
(1 + 2 + 3)²
= 6² = 36

Verificando el ejemplo (n=10)

1

Suma de cuadrados

1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100 = 385

2

Suma de 1 a 10

1 + 2 + 3 + ... + 10 = 55

3

Cuadrado de la suma

55² = 3025

4

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.

(a + b)² = a² + 2ab + b²
El término 2ab hace la diferencia

Conceptos clave

📐 Cuadrados ➕ Sumatorias ➖ Diferencia 🔢 Productos cruzados

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.

Python
Pulsa "Ejecutar" para ver el resultado

Variante B: for con range

Más pythónico usando for y range.

Python
Pulsa "Ejecutar" para ver el resultado

Variante C: dos bucles separados

Más claro: un bucle para cada cantidad. Menos eficiente pero más legible.

Python
Pulsa "Ejecutar" para ver el resultado

¿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
Resultado (las tres variantes) 25164150

Conceptos clave

1

i ** 2

Exponenciación. En Python, ** es el operador de potencia. i ** 2 es i².

2

suma += i

Asignación aumentada. Equivale a suma = suma + i. Más conciso.

3

range(1, 101)

Genera 1, 2, 3... 100. El segundo argumento es exclusivo (no incluye el 101).

Conceptos de Python aprendidos

** Exponenciación += Asignación aumentada 🔁 for range 📊 Acumuladores

sum() con generadores

Python tiene sum() integrado. Combinado con generadores, el código es muy expresivo.

Python
Pulsa "Ejecutar" para ver el resultado

Desglose

1

sum(range(1, n + 1))

sum() acepta cualquier iterable. range() es iterable. Suma 1+2+...+n directamente.

2

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))

Resultado 25164150

Conceptos aprendidos

📊 sum() 🌊 Generator expression 🔄 range() como iterable

Fórmulas cerradas

Existen fórmulas matemáticas para calcular ambas sumas sin iterar.

1 + 2 + 3 + ... + n = n(n+1)/2
Fórmula de Gauss para la suma de naturales
1² + 2² + ... + n² = n(n+1)(2n+1)/6
Fórmula para la suma de cuadrados

Verificando con n=10

1

Suma = 10 × 11 / 2 = 55 ✓

Cuadrado: 55² = 3025

2

Suma de cuadrados = 10 × 11 × 21 / 6 = 385 ✓

2n+1 = 21 cuando n = 10

3

Diferencia = 3025 − 385 = 2640 ✓

Coincide con el enunciado

Python
Pulsa "Ejecutar" para ver el resultado

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)
Bucle (n = 10⁹) ~30 segundos
Fórmula (n = 10⁹) instantáneo
Resultado 25164150

Conceptos aprendidos

📐 Fórmula de Gauss 🔢 Suma de cuadrados ⏱️ O(1) 🧮 Fórmulas cerradas

Prueba con otro n

n =