El siguiente algoritmo para determinar si un número es primo o no.
bool isPrime (int n)
{
// Casos de esquina
if (n <= 1) devuelve falso;
if (n <= 3) devuelve verdadero;
// Esto está marcado para que podamos omitir
// cinco números medios en el bucle inferior
if (n% 2 == 0 || n% 3 == 0) devuelve falso;
- ¿Cuáles son los pasos que debo seguir para dominar las matemáticas? ¿Y cuál es la forma más rápida de alcanzar este objetivo?
- Cómo demostrar que EQTM = {: L (M1) = L (M2)} es indecidible (suponga que M1 y M2 son codificaciones de TM)
- Sea m una máquina de turing y sea w una corriente de entrada de m. ¿Cómo puedo definir el tiempo de ejecución tm (w) de m en la entrada w?
- ¿Cuáles son las mejores universidades / facultad para un doctorado en informática teórica?
- Algoritmos: ¿Cómo visualizo y resuelvo problemas de retroceso?
para (int i = 5; i * i <= n; i = i + 6)
si (n% i == 0 || n% (i + 2) == 0)
falso retorno;
volver verdadero;
}
Aquí en el algoritmo nosotros
- En lugar de verificar hasta n, podemos verificar hasta √n porque un factor mayor de n debe ser un múltiplo de un factor menor que ya se haya verificado.
- El algoritmo se puede mejorar aún más al observar que todos los primos tienen la forma 6k ± 1, con la excepción de 2 y 3. Esto se debe a que todos los enteros se pueden expresar como (6k + i) para algún entero k y para i =? 1, 0, 1, 2, 3 o 4; 2 divide (6k + 0), (6k + 2), (6k + 4); y 3 divide (6k + 3). Entonces, un método más eficiente es probar si n es divisible por 2 o 3, luego verificar a través de todos los números de la forma 6k ± 1.
La complejidad temporal de este algoritmo es O (√n).
Fuente: Prueba de Primalidad | Conjunto 1 (Introducción y método escolar) – GeeksforGeeks