Algoritmos de Prueba de Primalidad
Resumen de la Prueba de Primalidad
La prueba de primalidad consiste en determinar si un número dado es primo. Existen varios algoritmos, cada uno con diferentes niveles de eficiencia y complejidad.
Algoritmos Comunes de Prueba de Primalidad
| Algoritmo |
Complejidad Tiempo |
Precisión |
Complejidad |
| División Prueba |
O(√n) |
100% |
Baja |
| Prueba de Primalidad de Fermat |
O(k log n) |
Probabilística |
Media |
| Prueba de Miller-Rabin |
O(k log³n) |
Probabilística |
Alta |
Método de División Prueba
def trial_division(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
Prueba de Primalidad de Fermat
import random
def fermat_test(n, k=5):
if n <= 1 or n == 4:
return False
if n <= 3:
return True
for _ in range(k):
a = random.randint(2, n - 2)
if pow(a, n - 1, n)!= 1:
return False
return True
Prueba de Primalidad de Miller-Rabin
def miller_rabin(n, k=5):
if n <= 1 or n == 4:
return False
if n <= 3:
return True
def check(a, d, n, s):
x = pow(a, d, n)
if x == 1 or x == n - 1:
return True
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
return True
return False
s = 0
d = n - 1
while d % 2 == 0:
d //= 2
s += 1
for _ in range(k):
a = random.randint(2, n - 2)
if not check(a, d, n, s):
return False
return True
Diagrama de Flujo de Comparación de Algoritmos
graph TD
A[Start Primality Test] --> B{Choose Algorithm}
B --> |Simple Cases| C[Trial Division]
B --> |Probabilistic| D[Fermat Test]
B --> |Advanced| E[Miller-Rabin Test]
C --> F{Is Prime?}
D --> G{Probability of Primality}
E --> H{High Accuracy}
Consideraciones Prácticas
En LabEx, recomendamos elegir el algoritmo adecuado basado en:
- Tamaño del número
- Precisión requerida
- Recursos computacionales
- Caso de uso específico