🔢 Matemáticas
Problemas matemáticos aparecen en todos los niveles. Los básicos son fáciles de resolver, los avanzados requieren conocer algoritmos específicos.
🎯 Números primos
Aparece en TODAS las competiciones. Memoriza esta función.
def es_primo(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0:
return False
return True
¿Por qué hasta la raíz cuadrada?
Si n = a × b, uno de los factores debe ser ≤ √n. No necesitas comprobar más allá.
Si n = a × b, uno de los factores debe ser ≤ √n. No necesitas comprobar más allá.
Encontrar primos en un rango
# Primos entre 1 y 100
primos = [n for n in range(2, 101) if es_primo(n)]
📐 Divisores
def divisores(n):
divs = []
for i in range(1, int(n**0.5) + 1):
if n % i == 0:
divs.append(i)
if i != n // i:
divs.append(n // i)
return sorted(divs)
# divisores(12) → [1, 2, 3, 4, 6, 12]
🔄 MCD y MCM
import math
# Máximo Común Divisor
math.gcd(12, 18) # 6
# Mínimo Común Múltiplo (Python 3.9+)
math.lcm(4, 6) # 12
# MCM manual (por si no está disponible)
def mcm(a, b):
return a * b // math.gcd(a, b)
➗ El módulo (%)
# Último dígito
n % 10 # 1234 % 10 = 4
# ¿Es par?
n % 2 == 0
# ¿Es múltiplo de X?
n % x == 0
# Dígitos de un número
while n > 0:
digito = n % 10
n = n // 10
📊 Fórmulas comunes
| Fórmula | Código |
|---|---|
| Área triángulo | base * altura / 2 |
| Área círculo | math.pi * r ** 2 |
| Pitágoras | c = (a**2 + b**2) ** 0.5 |
| Suma 1 a N | n * (n + 1) // 2 |
| Factorial | math.factorial(n) |
| Interés compuesto | capital * (1 + tasa) ** años |
Fórmula de Herón (área de triángulo con 3 lados)
import math
def area_heron(a, b, c):
s = (a + b + c) / 2 # semiperímetro
return math.sqrt(s * (s-a) * (s-b) * (s-c))
🔢 Conversiones de base
# Decimal a binario/octal/hex
bin(10) # '0b1010'
oct(10) # '0o12'
hex(10) # '0xa'
# Sin prefijo
bin(10)[2:] # '1010'
# Otras bases a decimal
int('1010', 2) # 10 (binario)
int('ff', 16) # 255 (hex)
📏 Suma de dígitos
def suma_digitos(n):
total = 0
while n > 0:
total += n % 10
n = n // 10
return total
# Versión corta
sum(int(d) for d in str(n))
🔄 Fibonacci
def fibonacci(n):
if n <= 1:
return n
a, b = 0, 1
for _ in range(n - 1):
a, b = b, a + b
return b
# Lista de N términos
def fib_lista(n):
fibs = [0, 1]
for i in range(2, n):
fibs.append(fibs[-1] + fibs[-2])
return fibs[:n]