Múltiplos de 3 y 5

Cargando Python...

Si listamos todos los números naturales menores que 10 que son múltiplos de 3 o 5, obtenemos 3, 5, 6 y 9. La suma de estos múltiplos es 23.

Encuentra la suma de todos los múltiplos de 3 o 5 menores que 1000.

Entendiendo el problema

Antes de escribir código, resolvamos el caso pequeño del enunciado para verificar que entendemos qué nos piden.

1

Múltiplos de 3 menores que 10

3, 6, 9 — Son divisibles por 3 sin dejar resto

2

Múltiplos de 5 menores que 10

5 — El 10 no cuenta porque no es menor que 10

3

Unión sin repetir

3, 5, 6, 9 — Ninguno se repite en este caso

4

Suma

3 + 5 + 6 + 9 = 23 — Coincide con el enunciado

n mod 3 = 0 → n es divisible por 3
El operador módulo (%) devuelve el resto de la división

¿Por qué necesitamos código?

Hay 466 números que cumplen la condición entre 1 y 999. Sumarlos manualmente sería tedioso y propenso a errores.

Conceptos clave

🔢 Divisibilidad 🔄 Iteración ❓ Condicionales ➕ Acumulación

La estrategia

Recorrer todos los números del 0 al 999, comprobar si cada uno es múltiplo de 3 o de 5, y si lo es, sumarlo a un acumulador.

Importante: No hay una única forma "correcta" de escribir esto. Aquí verás tres variantes que hacen exactamente lo mismo. Elige la que te resulte más clara.

Variante A: while True + break

Un bucle infinito que rompemos manualmente cuando llegamos al límite. Muy explícita, ideal cuando la condición de salida es compleja.

Python
Pulsa "Ejecutar" para ver el resultado

Variante B: while con condición

La condición de salida va directamente en el while. Más limpio, sin break. Útil cuando no sabes cuántas vueltas darás.

Python
Pulsa "Ejecutar" para ver el resultado

Variante C: for con range

Python gestiona el contador automáticamente. Menos código, menos posibilidad de errores. La más común cuando conoces el rango exacto.

Python
Pulsa "Ejecutar" para ver el resultado

¿Cuál elegir?

Variante Líneas Ventaja Cuándo usarla
A: while True + break 11 Muy explícita Condición de salida compleja
B: while con condición 7 Clara y compacta No sabes cuántas vueltas darás
C: for con range 5 Menos errores Conoces el rango exacto

Las tres dan el mismo resultado. La variante C es la más común en Python para este tipo de problemas.

Resultado (las tres variantes) 233168

Conceptos clave

1

suma = 0

Variable acumuladora. Aquí guardamos la suma parcial. Es como una hoja donde apuntamos el resultado mientras trabajamos.

2

while vs for

Bucles. Ambos repiten código. while repite mientras una condición sea verdadera. for recorre una secuencia predefinida.

3

range(1000)

Generador de secuencia. Produce los números 0, 1, 2... 999. No incluye el 1000. Nos ahorra gestionar el contador manualmente.

4

i % 3 == 0

Operador módulo. El % devuelve el resto de la división. Si el resto es 0, significa que i es divisible por 3.

5

or

Operador lógico. Basta con que se cumpla UNA de las dos condiciones. Si es múltiplo de 3, entra. Si es de 5, también.

6

suma = suma + i

Acumulación. Tomamos el valor actual de suma, le añadimos i, y guardamos el nuevo valor. También se puede escribir suma += i.

7

break

Salida de bucle. Termina el bucle inmediatamente. Útil cuando la condición de salida es compleja o está en medio del código.

Conceptos de Python aprendidos

📦 Variables 🔁 while loop 🔄 for loop ❓ if / else % Operador módulo 🚪 break 🔢 range() 🖨️ print()

Expresividad de Python

Python permite expresar la misma lógica de forma más compacta usando generadores y funciones integradas.

Python
Pulsa "Ejecutar" para ver el resultado

Desglose

1

range(1000)

Genera 0, 1, 2... 999 bajo demanda (lazy evaluation).

2

i for i in range(1000) if ...

Expresión generadora: produce solo los valores que pasan el filtro.

3

sum(...)

Función integrada que suma todos los elementos de un iterable.

Aspecto Fuerza bruta Pythónico
Iteración for explícito range()
Filtrado if con bloque if en generador
Acumulación suma += i sum()
Líneas 5 1
Resultado 233168

Solución O(1)

Las soluciones anteriores recorren todos los números. Existe una fórmula que da el resultado directamente, sin importar si el límite es 1000 o 1.000.000.000.000.

1 + 2 + 3 + ... + n = n × (n + 1) / 2
Fórmula de Gauss para la suma de los primeros n naturales

Aplicación a múltiplos

Los múltiplos de 3 menores que 1000 son: 3, 6, 9... 999 = 3×1, 3×2, 3×3... 3×333

3 + 6 + 9 + ... = 3 × (1 + 2 + ... + 333)
Factorizamos y aplicamos Gauss al paréntesis

Inclusión-exclusión

Si sumamos múltiplos de 3 y de 5 por separado, contamos dos veces los múltiplos de 15. Hay que restarlos una vez.

Σ(3) + Σ(5) − Σ(15)
Principio de inclusión-exclusión
Python
Pulsa "Ejecutar" para ver el resultado

Comparativa de rendimiento

Método Límite 1.000 Límite 10⁹ Complejidad
Fuerza bruta ~1.000 ops ~10⁹ ops O(n)
Pythónico ~1.000 ops ~10⁹ ops O(n)
Matemático 3 ops 3 ops O(1)
Fuerza bruta (límite 10⁹) ~30 segundos
Matemático (límite 10⁹) ~0.0001 segundos
Resultado 233168

Conceptos aprendidos

📐 Fórmula de Gauss ∩ Inclusión-exclusión 🎯 Funciones ⏱️ Complejidad O()

Prueba con otro límite