Descobrir se um número é primo ou não

pessoal mais uma dúvida, rsrs
como faço pra fazer uma função que retorne um valor booleano (true/false) que vai indicar se um número X digitado é primo ou não?
como faço pra verificar se um número é primo? não faço nem idéia de como fazer um if ou algo do tipo pra descobrir se é primo ou não… alguém ai pode ajudar?
na verdade minha dúvida é como fazer pra verificar se o número é primo ou não, a função eu sei fazer :wink:

bom…vamos aos conceitos…

um número é primo se ele for divisível apenas por 1 e por ele mesmo.

para você saber se um número é divisível por outro, você precisa usar o operador % que é o resto da divisão e verificar se o resultado é 0, por exemplo:

if (5 % 2 == 0){
     System.out.println("5 é divisivel por 2");
}else{
     System.out.println("5 NÃO é divisivel por 2");
}

certo, agora para saber se um número é primo, você precisa fazer um loop verificando se existe algum outro número que possa dividir este número… algumas dicas podem facilitar:

seu loop não precisa começar em 1, um sempre irá dividir qualquer número, pode começar em 2;
seu loop só precisa ir até a metade do valor do item arredondado para baixo, se passou desse valor então nenhum outro na sequencia irá dividir o número.
se o número for 1 ou 2 sempre será primo, senão vá para o loop.

então resumindo, você precisa fazer um loop de 2 até a metade do valor digitado fazendo um if como o de cima, caso entre no if é por que é primo, basta exibir a mensagem ai que é primo e dar um break, saindo do loop ja que você ja tem sua resposta.

bom, acho que ja expliquei tudo o que você precisa… não sei nem se deveria ter respondido…

[quote=maior_abandonado]bom…vamos aos conceitos…

um número é primo se ele for divisível apenas por 1 e por ele mesmo.

para você saber se um número é divisível por outro, você precisa usar o operador % que é o resto da divisão e verificar se o resultado é 0, por exemplo:

if (5 % 2 == 0){
     System.out.println("5 é divisivel por 2");
}else{
     System.out.println("5 NÃO é divisivel por 2");
}

certo, agora para saber se um número é primo, você precisa fazer um loop verificando se existe algum outro número que possa dividir este número… algumas dicas podem facilitar:

seu loop não precisa começar em 1, um sempre irá dividir qualquer número, pode começar em 2;
seu loop só precisa ir até a metade do valor do item arredondado para baixo, se passou desse valor então nenhum outro na sequencia irá dividir o número.
se o número for 1 ou 2 sempre será primo, senão vá para o loop.

então resumindo, você precisa fazer um loop de 2 até a metade do valor digitado fazendo um if como o de cima, caso entre no if é por que é primo, basta exibir a mensagem ai que é primo e dar um break, saindo do loop ja que você ja tem sua resposta.

bom, acho que ja expliquei tudo o que você precisa… não sei nem se deveria ter respondido…
[/quote]

valeu, é que eu não tava conseguindo ter essa lógica de começar em 2 e verificar até a metade se ele é divisível ou não … mas valeu ai vou pensar aqui agora

fiz aqui e deu erro … não to achando o que eu fiz de errado aqui

[code]package rotinas_16_8;
/*Faça um programa que receba pelo teclado um número N inteiro (maior que 0),

  • e o envie para uma função, que retornará um valor booleano (true/false)
  • que indicará se o número digitado é um número primo ou não. Exibir mensagem apropriada.
    */

import java.util.Scanner;

public class Exercicio2 {

public static void main(String[] args) {

	int N;
	Scanner tec = new Scanner (System.in);
	
	System.out.print("Digite um número maior do que zero: ");
	N = tec.nextInt();
		if (N <= 0){
			do {
				System.out.print("Digite um número válido: ");
				N = tec.nextInt();
			} while (N <= 0);
		}
		if ((N = 1) || (N = 2)){
			System.out.print("O número é primo");
		}
		
		if (primo = true){
			System.out.print("O número é primo");
		}
		if (primo = false){
			System.out.print("O número NÃO é primo");
		}
	}


public static boolean primo (int x){
	int y, aux;
	aux = (int) (x/2);
	
	for (y=2;y=aux;y++){
		if (x % y == 0){
			return true;
			break;
		}
	}
	return false;
}

}[/code]

            if ((N = 1) || (N = 2)){  

Não é “==” não?

[quote=entanglement] if ((N = 1) || (N = 2)){

Não é “==” não?

[/quote]

quando coloco “==” ele dá erro … mas o problema maior nem tá ai, é na função que dá um erro e não sei o que é

== serve para comparar
= serve apenas para copiar (atribuir), não para comparar

[quote=entanglement]== serve para comparar
= serve apenas para copiar (atribuir), não para comparar[/quote]

mas cara eu coloco == ele dá um erro … mas o problema nem tá ai, tá na função pra ver se o número é primo ou não, não to conseguindo fazer pra descobrir se é primo

Isto também está errado, embora o compilador não reclame:

            if (primo = true){  

tem de ser:

            if (primo == true){  

Vale lembrar que 1 não é primo, afinal considera número primo aquele que possui apenas 2 divisores, seria

ele mesmo e o 1.

import java.util.Scanner;

public class Exercicio2 {
	
	public static void main(String[] args) {
		int N;
                int cont = 0; 
		Scanner tec = new Scanner (System.in);
		System.out.print("Digite um número maior do que zero: ");

				do {
					System.out.print("Digite um número válido: ");
					N = tec.nextInt();
				} while (N <= 0);

			for(int i = 1 ; i <=N ; i++){
                             cont++;
                            }
                      if(cont==2){
System.out.println("O numero " + String.valueOf(N) + " eh primo");
}
		}
	
}


Se eu estiver errado me falem ! Abraços