1. Introducción
Primero, repasemos una teoría básica.
En pocas palabras, un número es primo si solo es divisible por uno y por el número mismo. Los números no primos se llaman números compuestos. Y el número uno no es primo ni compuesto.
En este artículo, veremos diferentes formas de verificar la primacía de un número en Java.
2. Una implementación personalizada
Con este enfoque, podemos verificar si un número entre 2 y (raíz cuadrada del número) puede dividir el número con precisión.
La siguiente lógica devolverá verdadera si el número es primo:
public boolean isPrime(int number) { return number > 1 && IntStream.rangeClosed(2, (int) Math.sqrt(number)) .noneMatch(n -> (number % n == 0)); }
3. Usando BigInteger
La clase BigInteger se usa generalmente para almacenar enteros de gran tamaño, es decir, aquellos mayores de 64 bits. Proporciona algunas API útiles para trabajar con valores int y long .
Una de esas API es isProbablePrime . Esta API devuelve falso si el número es definitivamente un compuesto y devuelve verdadero si existe alguna probabilidad de que sea primo. Es útil cuando se trata de números enteros grandes porque puede ser un cálculo bastante intensivo verificarlos completamente.
Una nota al margen rápida : la API isProbablePrime usa lo que se conoce como pruebas de primalidad “Miller - Rabin y Lucas - Lehmer” para verificar si el número probablemente sea primo. En los casos en los que el número es menor a 100 bits, solo se usa la prueba “Miller - Rabin”, de lo contrario, ambas pruebas se usan para verificar la primalidad de un número.
La prueba "Miller-Rabin" itera un número fijo de veces para determinar la primacía del número y este recuento de iteraciones se determina mediante una verificación simple que involucra la longitud de bits del número y el valor de certeza pasado a la API:
public boolean isPrime(int number) { BigInteger bigInt = BigInteger.valueOf(number); return bigInt.isProbablePrime(100); }
4. Uso de Apache Commons Math
Apache Commons Math API proporciona un método llamado org.apache.commons.math3.primes.Primes, que usaremos para verificar la primacía de un número.
Primero, necesitamos importar la biblioteca Apache Commons Math agregando la siguiente dependencia en nuestro pom.xml :
org.apache.commons commons-math3 3.6.1
La última versión de commons-math3 se puede encontrar aquí.
Podríamos hacer la verificación simplemente llamando al método:
Primes.isPrime(number);
5. Conclusión
En este artículo rápido, hemos visto tres formas de verificar la primacía del número.
El código para esto se puede encontrar en el paquete com.baeldung.algorithms.primechecker en Github.