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

9 respostas
M

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:

9 Respostas

M

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…

M

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…

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

M

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

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;
	}
}
E
if ((N = 1) || (N = 2)){

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

M

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

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

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 é

E

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

M

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

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

E

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

if (primo = true){

tem de ser:

if (primo == true){
X

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

Criado 19 de agosto de 2011
Ultima resposta 19 de ago. de 2011
Respostas 9
Participantes 4