Números primo

Eu tô tentando fazer um sistema para verificar se um número é primo ou não e não está funcionando. O que eu estou fazendo de errado?

public class NúmerosPrimos {
	public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
		System.out.println("Digite um número qualquer, por favor. O nosso sistema verificará se ele é primo ou não. ");
		int número = scan.nextInt();
		for(int i=2;i<número;i++) {
			if(número % i == 0 && número != 2) {System.out.println("O número não é primo");}
			else {System.out.println("O número é primo");}
		}
	}
}

Oi @RickyCoben,

Quando você precisar de ajuda, dizer que “não está funcionando” não nos informa qual é o problema.
Geralmente é bom você dar alguns exemplos, dizer o resultado que você tá esperando e o resultado que está aparecendo no lugar.

De vista, uma coisa errada nesse código é o seguinte: a cada iteração do loop, você faz o IF pra dizer se é primo ou não, mas isso é só parte da informação… só com o loop terminado você pode dizer se o número é primo ou não.
Pense assim, se o número tiver qualquer divisor além de 1 e ele mesmo, ele já não é primo.
Uma estratégia comum pra resolver isso é criar uma variável boolean que vai atuar como uma flag (vamos chamar de temDivisores).

Essa flag você coloca como true dentro do loop, se em algum momento achar um divisor.

Depois do look você verificar se a flag é true. Se for, o número não é primo. Se não for, o número é primo.

1 curtida

Você está imprimindo a mensagem se é primo ou não dentro do for, ou seja, para cada teste que você faz, imprime a mensagem novamente. No final, as mensagens são mostradas várias vezes.

O certo é fazer as verificações primeiro e só imprimir a mensagem no final, depois do for.

Vale lembrar que o que não falta na internet são algoritmos para ver se um número é primo. Aqui no GUJ mesmo tem vários, e você pode se basear neles para comparar com o seu código e ver o que está errado.

Aqui tem alguns exemplos.

1 curtida