Special Pythagorean Triplet
Un triplete pitagórico cumple a² + b² = c². Encuentra el único triplete donde a + b + c = 1000 y calcula el producto a × b × c.
1 Entendiendo el Problema
Un triplete pitagórico es un conjunto de tres enteros positivos (a, b, c) que satisfacen el teorema de Pitágoras. El ejemplo más famoso es (3, 4, 5).
Verificación manual:
Verificar la suma
200 + 375 + 425 = 1000 ✓
Verificar Pitágoras
200² + 375² = 40,000 + 140,625 = 180,625
425² = 180,625 ✓
Calcular el producto
200 × 375 × 425 = 31,875,000
2 Fuerza Bruta - 3 Variantes
Probamos combinaciones de a y b, calculando c = 1000 - a - b, y verificamos si es un triplete válido.
Variante A: while True + break
Bucle infinito con break cuando encontramos el triplete.
Variante B: while condición
Condiciones directas en los while.
Variante C: for range
Usando for con range para iterar.
Análisis de complejidad
Dos bucles anidados hasta n/3 y n/2
Solo variables auxiliares
3 Enfoque Pythónico
Usando generadores y next() para encontrar el primer triplete válido.
Herramientas usadas
next()— Obtiene el primer elemento de un iteradorfor c in [expr]— Truco para "asignar" en comprensiónyield— Generador perezosomath.prod()— Producto de iterables
El truco de for c in [expr]
En Python no puedes hacer asignaciones dentro de una comprensión. El truco es usar un for sobre una lista de un elemento:
# Esto NO funciona: # (a, b, c := 1000-a-b) # Esto SÍ funciona: for c in [1000 - a - b]
4 Solución Algebraica con Fórmula de Euclides
La fórmula de Euclides genera todos los tripletes pitagóricos primitivos. Con álgebra, podemos reducir el problema a encontrar dos parámetros.
Derivación algebraica
Sumando los tres términos:
Si a + b + c = 1000, entonces:
Buscamos m, n enteros positivos con m > n tal que m(m + n) = 500
Factorización de 500
500 = 2² × 5³. Buscamos m tal que 500/m - m = n > 0:
| m | m + n = 500/m | n | ¿Válido? |
|---|---|---|---|
| 10 | 50 | 40 | m < n |
| 20 | 25 | 5 | ✓ m > n |
| 25 | 20 | -5 | n < 0 |
Comparación de rendimiento
| Método | Complejidad | Iteraciones (n=1000) |
|---|---|---|
| Fuerza bruta | O(n²) | ~55,000 iteraciones |
| Fórmula de Euclides | O(√n) | ~22 iteraciones |
Nota histórica
La fórmula de Euclides (~300 a.C.) genera todos los tripletes pitagóricos primitivos. Un triplete es primitivo si gcd(a,b,c) = 1. Todo triplete no primitivo es un múltiplo de uno primitivo.