김현이

[Java] Usando Stream para Encontrar Números Primos de Forma Lazy

  • Idioma de escrita: Coreana
  • País de referência: Todos os paísescountry-flag
  • TI

Criado: 2024-07-23

Criado: 2024-07-23 19:39

Comumente, para verificar se n é um número primo, divide-se n por números de 2 até n - 1 e verifica-se se é divisível por algum deles.

Neste método, vamos aplicar algumas otimizações para torná-lo mais eficiente e utilizar Stream para aplicar a avaliação preguiçosa (lazy evaluation).


Método Naive

A seguir, apresentamos um método naive para verificar se n é um número primo.

Melhorias

  • Se n = a x b, podemos assumir que a > b sem perda de generalidade.
    Ou seja, precisamos verificar apenas até sqrt(n). Como a operação sqrt() é custosa, podemos substituí-la pela condição i * i <= n.
  • Números primos maiores que 5 têm a forma 6k ± 1. Portanto, podemos incrementar i de 6 em 6 e verificar se n é divisível por i ou i + 2, reduzindo o número de iterações.

Método Melhorado


Aplicando Avaliação Preguiçosa com Stream

O Stream do Java, ao contrário de List, não executa as operações imediatamente após sua definição.

Ele fica em estado de espera, com a definição de como calcular cada elemento, e só executa a operação quando um elemento específico é requisitado.

Utilizando essa característica, podemos criar um Stream que gera números primos da seguinte forma.

Resultado da Execução

Código completo

Resultado da execução

[Java] Usando Stream para Encontrar Números Primos de Forma Lazy




Comentários0