Verifique se um número é primo em Java
1. Introdução
Primeiro, vamos examinar a mesma teoria básica.
Simplificando, um número é primo se só for divisível por um e pelo próprio número. Os números não primos são chamados de números compostos. E o número um não é nem primo nem composto.
Neste artigo, daremos uma olhada em diferentes maneiras de verificar a primalidade de um número em Java.
2. Uma implementação personalizada
Com essa abordagem, podemos verificar se um número entre 2 e (raiz quadrada do número) pode dividir o número com precisão.
A seguinte lógica retornarátrue se o número for primo:
public boolean isPrime(int number) {
return number > 2
&& IntStream.rangeClosed(2, (int) Math.sqrt(number))
.noneMatch(n -> (number % n == 0));
}
3. UsandoBigInteger
A classeBigInteger é geralmente usada para armazenar números inteiros de grande porte, ou seja, maiores que 64 bits. Ele fornece algumas APIs úteis para trabalhar com os valoresintelong.
Uma dessas APIs é oisProbablePrime. Esta API retornafalse se o número for definitivamente um composto e retornatrue se houver alguma probabilidade de ser primo. É útil quando se lida com números inteiros grandes, porque pode ser uma computação bastante intensiva para verificá-los completamente.
A quick side-note - a APIisProbablePrime usa o que é conhecido como testes de primalidade “Miller - Rabin e Lucas - Lehmer” para verificar se o número é provavelmente primo. Nos casos em que o número é inferior a 100 bits, apenas o teste "Miller - Rabin" é usado; caso contrário, ambos os testes são usados para verificar a primalidade de um número.
O teste "Miller-Rabin" itera um número fixo de vezes para determinar a primalidade do número e essa contagem de iterações é determinada por uma verificação simples que envolve o comprimento do bit do número e o valor de certeza passado para a API:
public boolean isPrime(int number) {
BigInteger bigInt = BigInteger.valueOf(number);
return bigInt.isProbablePrime(100);
}
4. Usando Apache Commons Math
Apache Commons Math API fornece um método chamadoorg.apache.commons.math3.primes.Primes, que usaremos para verificar a primalidade de um número.
Primeiro, precisamos importar a biblioteca Apache Commons Math adicionando a seguinte dependência em nossopom.xml:
org.apache.commons
commons-math3
3.6.1
A versão mais recente do commons-math3 pode ser encontradahere.
Poderíamos fazer a verificação chamando o método:
Primes.isPrime(number);
5. Conclusão
Nesta rápida descrição, vimos três maneiras de verificar a primalidade do número.
O código para isso pode ser encontrado no pacotecom.example.primecheckerover on Github.