Ir ao conteúdo
  • Cadastre-se

Java Um programa em java que imprima números primos entre 2 e 10


Posts recomendados

Olá galera, estou com uma dúvida para escrever um programa que mostre os números primos entre 2 e 10, fiz da seguinte forma:

int x;
        
               for(x=2;x<=10;x++){
                  
                    if(x%2!=0){
                        if((x%3!=0)&&(x%5!=0))
                            if((x%7!=0)&&(x%9!=0))
                       System.out.println(x+" é primo");
                   
                        }
                }

 

 

Mas não imprime nada, alguém tem uma sugestão para me ajudar?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa tarde, @Rafael V.F

 

Sua lógica me parece um pouco errada, seguindo essa ideia de usar apenas um laço, pois no início do laço de repetição os valores inicias não serão divisíveis pelos números mais altos (pensando em números primos), então você deveria dividir pelos números menores ou iguais ao número em questão sendo consultado (seguindo a ordem do contador do laço de repetição). Pensei em uma solução, neste caso, utilizando dois laços de repetição, um deles responsáveis por percorrer os números de 2 até 10 e outro responsável por percorrer os valores dos números menores ou iguais aos valores do primeiro laço de repetição, dessa forma você dividiria apenas pelos valores menores ou iguais ao número sendo verificado.

 

A ideia é mais ou menos a seguinte:

 

int x; // Valor inicial da consulta do seu laço de repetição
int num = 10; // Quantidade dos números que você deseja verificar se são primos ou não
int divCount;

for(x=2;x<=num;x++) { // Laço responsável por percorrer cada número no range que você determinou na variável num
    divCount = 0; // Reseta a quantidade de divisões a cada novo número sendo verificado
    for(int n=1;n<=x;n++) { // Laço responsável por percorrer os números entre 1 e o valor de x
     	// Lógica para verificar se o número é primo ou não
    }
}

Basicamente a lógica para verificar seria quase a mesma que você estava realizando, porém ao invés de dividir por todos os números de forma fixa, você divide pelo valor de n, que é a variável que responsável por ser o divisor de x. Toda vez que um um número tiver o resultado da sua divisão igual a zero, isto é, n for == 0, use a variável divCount para saber quantos divisores aquele número (variável x) possui. Deixo o resto da lógica com você, qualquer dúvida é só postar aí.

 

Bons estudos.

Link para o comentário
Compartilhar em outros sites

@XenoStory Muito obrigado, eu estava pensando em uma lógica diferente tipo: o que define um número como primo... ai acabei esquecendo de utilizar a lógica mais simples que seria este ter apenas 2 divisores, depois com sua explicação percebi o quão óbvio estava kkk ai ficou desta forma:

int x,z, divCount = 0;
        int num=100;
        
        for(x=2;x<=num;x++){
            divCount=0;
            
            for(int n=1;n<=x;n++){
                z=x%n;
                
               if(z==0)
                  divCount++;
            }
            
           if(divCount==2)
                System.out.println(x +" é um número primo");
            
        }
        
    }
}

Não sei se a lógica tá do modo mais simples, mas antes de eu declarar a variável estava utilizando ali diretamente um if que não deu muito certo, ai fiz assim foi tranquilo, fiz até entre 2 e 100 para garantir rsrs!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Rafael V.F boa, a minha ideia era essa mesma. O que você pode fazer pra não precisar declarar essa variável z, é utilizar o resultado da expressão contida nele direto no if (talvez você tenha tentado fazer isso antes). Ficando assim:

 

if(x%n == 0)
    divCount++;

De resto, me parece tudo certo.

 

Qualquer coisa, posta aí.

Link para o comentário
Compartilhar em outros sites

@Rafael V.F Olá. Apenas vou postar uma forma diferente p fazer esse exercício usando um método p isso:

public class Aplicacao {

    public static void main(String[] args) {

        for (int i = 2; i <= 100; i++) {
            if (ehPrimo(i)) {
                System.out.print(i + " ");
            }
        }

    }

    public static boolean ehPrimo(int n) {

        boolean ehPrimo;

        ehPrimo = true;

        for (int i = 2; i < n; i++) {
            if (n % i == 0) {
                ehPrimo = false;
            }
        }
        return (ehPrimo && n > 1);
    }

}

O método defini como estático para poder ser acessado no main mesmo

É importante entender a lógica.

Só q claro, o @XenoStory já te passou uma maneira simples p resolver o exercício

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...