Potencia rápida en C: ejercicio resuelto
Potencia rápida en C: ejercicio resuelto
Si buscas potencia rápida en C ejercicio resuelto, aquí tienes la exponenciación binaria (fast exponentiation o binary exponentiation): calcula base^exp en O(log n) multiplicaciones en lugar de O(n), dividiendo el exponente entre 2 en cada paso.
Este algoritmo es la base del cálculo modular en criptografía (base^exp mod m) y de la multiplicación de matrices en tiempo O(n³ log k).
Enunciado
Implementa:
potencia_rapida(base, exp): versión iterativa, devuelvebase^expconlong long.potencia_rapida_mod(base, exp, mod): versión con módulo para evitar desbordamiento.potencia_recursiva(base, exp): versión recursiva equivalente.
Solución en C
Resultado esperado
Errores frecuentes
- Usar
base * baseantes de comprobar si el exponente es impar: el resultado puede desbordarse innecesariamente si no se aplica el módulo. - No reducir
base %= modal inicio de la versión modular: sibaseya superamod, el primer cuadrado puede desbordarlong long. - Confundir
exp & 1conexp % 2: son equivalentes para enteros positivos, pero& 1es más claro en el contexto de manipulación de bits. - Olvidar el caso base
exp == 0: cualquier número elevado a 0 es 1, incluso 0^0 se define como 1 en combinatoria y algoritmos.
Aplicación práctica
La exponenciación rápida es esencial en criptografía (RSA: m^e mod n), en test de primalidad de Miller-Rabin y en la multiplicación de matrices en tiempo logarítmico. En competición algorítmica es una herramienta básica para módulos grandes.
Siguiente ejercicio recomendado
- Fibonacci en C: ejercicio resuelto
- Algoritmo de Euclides (MCD) en C: ejercicio resuelto
- Criba de Eratóstenes en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Por qué la potencia rápida es O(log n) y no O(n)?
Porque en cada iteración el exponente se divide entre 2 (exp >>= 1). Para calcular 2^1000 se necesitan solo 10 iteraciones (log₂ 1000 ≈ 10) en lugar de 1000. El número de multiplicaciones es proporcional al número de bits del exponente.
¿Qué es la versión con módulo y cuándo se usa?
La versión con módulo calcula base^exp mod m aplicando % mod en cada paso para mantener los valores pequeños y evitar desbordamiento. Se usa cuando se trabaja con números muy grandes en criptografía o teoría de números, donde el resultado exacto no importa pero sí el residuo.
¿Funciona la potencia rápida con exponentes negativos?
Con enteros no directamente: base^(-n) = 1/base^n requiere aritmética fraccionaria. Para el caso modular, el inverso modular de base^n mod p se puede calcular como base^(p-2) mod p cuando p es primo (pequeño teorema de Fermat).