Números primos são aqueles que têm exatamente dois divisores: 1 e ele mesmo. Trabalhar com números primos é comum em áreas como matemática, criptografia e programação de algoritmos. Neste post, vamos aprender como gerar números primos em Java, criando uma função para verificar se um número é primo e, em seguida, listar os números primos dentro de um intervalo.

Passo 1: Verificar se um número é primo

Para verificar se um número é primo, basta testá-lo em relação aos divisores de 2 até a sua raiz quadrada. Essa abordagem economiza tempo e processamento, pois elimina divisões desnecessárias.

public class NumerosPrimos {
    // Função que verifica se um número é primo
    public static boolean ehPrimo(int numero) {
        if (numero <= 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(numero); i++) {
            if (numero % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int numero = 17;
        if (ehPrimo(numero)) {
            System.out.println(numero + " é um número primo.");
        } else {
            System.out.println(numero + " não é um número primo.");
        }
    }
}

Explicação do código:

  • Laço For: Verifica divisores de 2 até a raiz quadrada do número.

  • Math.sqrt(): Calcula a raiz quadrada do número, reduzindo as iterações necessárias.

Se o número tiver algum divisor nesse intervalo, ele não é primo. Caso contrário, ele é considerado primo.

Passo 2: Listar números primos em um intervalo

Agora que temos uma função para verificar se um número é primo, podemos utilizá-la para listar todos os números primos em um intervalo específico.

public class ListaNumerosPrimos {
    public static boolean ehPrimo(int numero) {
        if (numero <= 1) return false;
        for (int i = 2; i <= Math.sqrt(numero); i++) {
            if (numero % i == 0) return false;
        }
        return true;
    }

    public static void listarPrimos(int limiteInferior, int limiteSuperior) {
        System.out.println("Números primos entre " + limiteInferior + " e " + limiteSuperior + ":");
        for (int i = limiteInferior; i <= limiteSuperior; i++) {
            if (ehPrimo(i)) {
                System.out.print(i + " ");
            }
        }
    }

    public static void main(String[] args) {
        listarPrimos(10, 50); // Exemplo: listando primos entre 10 e 50
    }
}

Saída esperada:

Números primos entre 10 e 50:
11 13 17 19 23 29 31 37 41 43 47

Explicação do código:

  1. Função listarPrimos: Recebe um intervalo e utiliza a função ehPrimo() para verificar cada número dentro do limite.

  2. Laço For: Itera pelos números do limite inferior ao superior, imprimindo os primos encontrados.

Outro exemplo prático

import  java.util.Scanner;

 public class NumerosPrimos {
    public static void main(String[] args) 
    {
        int n, aux=0;
        Scanner sc = new Scanner(System.in);
        System.out.print("Digite um número inteiro: ");
        n  = sc.nextInt();        
        
        //calcula a qtde. de números que são divisíveis por 'n' (aux) 
        for(int i=1; i<=n; i++)
        {
            if(n % i == 0)
                aux+=1;
        }
        
        int[] numerosDivisiveis; //define o vetor, sendo apenas uma referência 
        numerosDivisiveis = new int[aux]; //aloca x posições (aux) p/ o vetor              
        
        if(aux > 2) //se qtde de números divisíveis por 'n' (aux) for maior que 2...  
        {          
          for(int i=0, j=1; i<=aux; j++)
          {
              /* Se o resto da divisão por 'j' (contador do 1 até 'aux') 
              * do número informado for igual a zero (for divisível)... */        
              if(n % j == 0) 
              {                    
                 numerosDivisiveis[i] = j; //armazena esse valor no vetor 
                 //soma uma unidade ao contador do 'aux' (qtde. de posições do vetor)
                 i++; 
              }
           /*Se todo o vetor for preenchido, parar com o laço para se evitar o loop 
           infinito
              if(i == aux){ break; }                                                                         
          }
            
          System.out.print(n + " não é primo!\n");
          System.out.print(n + " eh divisivel por: ");
            
          for(int i=0; i<aux-1; i++) //Mostra os números divisíveis por 'n'
          {
              System.out.print(numerosDivisiveis[i] + ", ");            
          }
          System.out.print("e "+ numerosDivisiveis[aux-1] + ".\n\n");            
      }
      else //Se o valor informado for primo...
      {
          System.out.print(n + " é primo!\n"); 
          System.out.print(n + " eh divisivel por 1 e por ele mesmo.\n\n"); 
      }
  }      
 }

Trabalhar com números primos em Java é uma excelente forma de aprender sobre algoritmos e otimização.

O uso de Math.sqrt() para reduzir o número de operações em verificações de primalidade torna o algoritmo mais eficiente, especialmente para intervalos grandes.

DOMINE O JAVA WEB ATRAVÉS DE AULAS PASSO A PASSO, DO BÁSICO AO AVANÇADO!

Domine as boas práticas com projetos práticos que vão te ajudar a desenvolver sistemas e se destacar no mercado de programação.

Clique na imagem abaixo e conheça mais detalhes do nosso curso:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *