Thumbnail image

Trabalhando com números primos no Java

Recentemente, eu senti a necessidade de adicionar no mínimo um dia na semana para estudar algoritmos e estrutura de dados em Java. Eu já havia estudado esse conteúdo antes na faculdade, mas acontece que muitas empresas utilizam desafios de algoritmos e estruturas de dados nos seus processos seletivos. E por essa razão eu resolvi voltar a estudar algoritmos e estrutura de dados. E como todos sabemos, estudar algoritmos e estrutura de dados ajuda qualquer programador a resolver problemas.

Mas vamos deixar uma coisa clara, esse artigo é algo simples, feito para iniciantes, não vou abordar nada mais complexo e didático como Notação Big O e complexidade de algoritimos.

Se você procura por algo mais acadêmico e mais complexo, basta uma simples pesquisa no google para encontrar inúmeras plataformas e cursos voltadas para desafios de algoritmos e questões utilizadas nos processos seletivos das grandes empresas. Algumas das mais famosas plataformas e cursos são: Coursera, Hackerrank, Codewars, LeetCode entre outras. Confesso que não sei se existem plataformas como essas em português, mas se você planeja entrar para uma grande empresa você precisa falar inglês e resolver todos esses desafios em inglês mesmo. Uma outra dica, se você programa em Java como eu (por isso está aqui!), eu gostaria de sugerir dois livros: Primeiro o talvez mais famoso livro sobre o assunto, é o Algorithms do Robert Sedgewick. O segundo é o Java Challengers do brasileiro Rafael Chinelato Del Nero. Nele você vai praticar 70 desafios usando Java e é um excelente conteúdo para melhorar a nossa capacidade de resolver problemas. Mas hoje eu quis trazer aqui a minha solução para um famoso e simples desafio, é de nivel iniciante, mas quando eu tive que fazer ele pela primeira vez, eu ainda estava na faculdade e me lembro de ter quebrado a cabeça para resolver. Se você tem outra solução, sinta-se a vontade para compartilhar na sessão de comentários!

O desafio é, escreva um programa que receba um número e diga se este número é primo ou não.

Claro que existem inúmeras maneiras de resolver esse desafio em Java, provavelmente muitas melhores que a minha, mas eu gostaria de compartilhar a minha maneira de resolver esse desafio. Primeiro nós precisamos relembrar o que é um número primo. Um número primo é um número natural inteiro, maior que 1 que só pode ser dividido por 1 e por ele mesmo.

No Java, nós temos um operador matemático chamado “módulo” que retorna o resto de uma divisão. Ele é representado pelo simbolo “%".

Por exemplo 10 % 2 = 0, zero é o resto da divisão.
11 % 2 = 1, neste caso, 1 é o resto da divisão.

Agora que temos todas essas informações podemos escrever a nossa lógica. O exemplo desse artigo foi feito usando o Intellij Idea que é uma ide da JetBrains. Você pode utilizar qualquer ide da sua preferência. Vamos dar uma olhada no código abaixo:

    private static boolean primo(int numeroEscolhido) {
        for (int i = 2; i < numeroEscolhido; i++) {
            if (numeroEscolhido % i == 0)
                return false;
        }
        return true;
    }

Temos acima um método booleano que recebe um int como parâmetro, dentro desse método temos um loop “for” que percorre todos os números entre 2 até um a menos que o número passado por parâmetro no método. É feita uma verificação, se o resto da divisão inteira é igual a zero, isso quer dizer que o numero verificado pode ser dividido por outros números além de 1 e ele mesmo, logo ele retorna “false” provando que o número não é primo. Se nenhuma divisão retornar zero, então esse número é primo. Agora vamos escrever um pequeno programa para usarmos nosso método. Primeiro vamos criar uma classe Principal e nela já vamos criar nosso método main. Também usaremos a classe Scanner para recebermos o número que será verificado e mostrar algumas instruções no terminal.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner entrada = new Scanner(System.in);

        System.out.println("Tecle um número para saber se é primo: ");
        int numeroEscolhido = entrada.nextInt();

    }


    private static boolean primo(int numeroEscolhido) {
        for (int i = 2; i < numeroEscolhido; i++) {
            if (numeroEscolhido % i == 0)
                return false;
        }
        return true;
    }

Continuando o nosso programa, vamos agora escrever uma pequena condição para usar o nosso método anterior passando o numero scaneado como parâmetro e agora também podemos fechar o nosso scanner. Ficará assim.

        if (primo(numeroEscolhido)) {
            System.out.println(numeroEscolhido + " é um numero primo.");
        } else {
            System.out.println(numeroEscolhido + " não é um numero primo.");
        }


        entrada.close();

Como pudemos ver, trabalhar com números primos em Java é muito simples. Aproveite esse algoritmo e adiciona mais complexidade, algumas ideias que poderiam ser feitas são: Escrever um programa que imprima todos os números primos num intervalo de 1 a 100. Você também pode ir além do terminal e utilizar o JOptionPane para mostrar caixas de dialogo na hora de receber os números. O Java nos dá um número imenso de possibilidades para trabalhar com a mesma ideia. Abaixo vou deixar todo o código da classe, mas se você preferir, fique a vontade para baixar direto do meu GitHub aqui.

import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        
        Scanner entrada = new Scanner(System.in);

        System.out.println("Tecle um numero para saber se é primo: ");
        int numeroEscolhido = entrada.nextInt();

        if (primo(numeroEscolhido)) {
            System.out.println(numeroEscolhido + " é um numero primo.");
        } else {
            System.out.println(numeroEscolhido + " não é um numero primo.");
        }


        entrada.close();
    }

    private static boolean primo(int numeroEscolhido) {
        for (int i = 2; i < numeroEscolhido; i++) {
            if (numeroEscolhido % i == 0)
                return false;
        }
        return true;
    }
}

Eu espero que esse artigo ajude e incentive a prática de exercícios com algoritmos e estrutura de dados usando Java. Qualquer dúvida ou sugestão sinta-se a vontade para comentar. Espero que tenham gostado e vejo vocês no próximo desafio.