Verifique se um número é primo em Java

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.