Como ver se o número é primo?

09/04/2009

1

Galera, eu estou fazendo um curso técnico em informática na escola,e o professor ensinou essa semana as estruturas de repetição... Eu preciso desenvolver um código que recebe um número do usuário e exibe uma mensagem na tela informando se o número é primo ou não. Números primos são aqueles que são apenas divisiveis por 1 e por ele mesmo. Ó problema é que eu não estou conseguindo fazer o código. Vejam o que eu fiz até agora:
import javax.swing.JOptionPane;
public class Exercicio19 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String strNum;
		float floNum, floCont, floRes, floDiv;
		
		strNum = JOptionPane.showInputDialog(null, "Insira o número:");
		floNum = Float.parseFloat(strNum);
		floDiv = 1;
			
		while (floNum == 0)
		{
			strNum = JOptionPane.showInputDialog(null, "Insira um número diferente de 0.");
			floNum = Float.parseFloat(strNum);
		}
		
		if (floNum == 1)
		{
			JOptionPane.showMessageDialog(null, "O número 1 não é primo");
			System.exit(0);
		}
		
		if (floNum == 2)
		{
			JOptionPane.showMessageDialog(null, "O número 2 é primo");
			System.exit(0);
		}
		
			floRes = floNum;
						
		for (floCont = floRes; floCont >= 2; floCont--)
		{
			floDiv = floNum % floCont;
			if (floDiv == 0)
			{
				JOptionPane.showMessageDialog(null, "O número " + floNum + " não é primo.");
				floCont = 1;
			}
		}
		
			if (floDiv != 0)
			{
				JOptionPane.showMessageDialog(null, "O número " + floNum + " é primo.");
				System.exit(0);
			}
			
			
				
				}
		
	}
Não está dando certo. O que tem de errado?! Eu só posso usar FOR, WHILE e DO WHILE, pois foi apenas oq o professor ensinou até agora. Obrigado desde já pela ajuda. Abraços
Responder

Posts

 int primo(int num)
{
    int cont = 1;
    
    if (num ==1)
        return 1;
        
    do {
        cont++; 
        if(num == cont)
           return 1;    
    } while(num % cont);
    return 0;
}
a lógica é mais ou menos essa ^^
Responder

09/04/2009

Lucas

Ahhh, tudo bem... mas não teria como alguem me ajudar com o código que eu já desenvolvi?! Eh porque eu preciso de algo utilizando um raciocínio lógico mas apenas com as estruturas de repetição.. nada de métodos! obrigado
Responder

30/03/2012

João Terceiro

Então tive o mesmo problema que você... e consegui resolver, rodando somente com as estruturas de repetição. Usei a variáveis "número" (Esse valor será digitado pela pessoa que deseja saber se o número é realmente primo) "elemesmo" ( É a variável que vai dividir o número até chegar no valor dele mesmo) "contador" ( Que vai contar quantas vezes a divisão feita do número por ele mesmo chegou ao resultado igual a 0, se este número for menor ou igual a 2, ele é primo, ou se for maior que 2 não é primo) Dá uma olhada nesse código, roda ele para ver como funciona.
import java.util.Scanner;


public class Primos {
	
	public static void main (String args[]){  
	      Scanner scan = new Scanner (System.in);  
	        
	      int numero, elemesmo=0, resto, contador=0;  
	        
	      System.out.println("Digite um Número: ");  
	      numero = scan.nextInt();  
	        
	        while ( numero >= elemesmo){
	        	++elemesmo;
	        	
	        	resto = numero % elemesmo; 
	        	
	        	if ( resto == 0){
	  	    	  	  contador++;
	  	      }
	       
	        	
	        }
	        if ( contador <= 2)	{
	        	
	        	System.out.println("O Número "+numero+" é primo");
	        }
	        else
	        {
	        	System.out.println("Numéro "+numero+" não é primo");
	        }	      
	     
	      }  
	        
	   }  
Responder

01/03/2013

Caio Timm

não entendi o que faz na seguinte linha:
 if ( contador <= 2)   {  
Responder

03/03/2013

Guri

Contador de divisores... se existirem ate 2 divisores entao....
Responder
cara. um numero só é primo quando a divisao por 1 e ele meso é exata. da uma olhada mais detalhada no seu codigo
Responder

03/04/2013

Yuri Müller

ae mano, também sou iniciante no java, e encarei sua dúvida como um desafio, fiz esse código e pra mim deu tudo certo:

class TestesPrimos {
   public static void main(String[] args) {
   Scanner s = new Scanner(System.in);
   int cont = 1;
   while (cont != 0) {
   System.out.print("Informe um número: ");
   int i = s.nextInt();
   if (i % 2 != 0 & i % 3 != 0){
       System.out.println("O número "+i+" é primo!");
  
   } else if (i == 2 ^ i == 3) {
       System.out.println("O número "+i+" é primo!");
   } else if (i == 0){
       System.out.println("Insira um número maior que 0!");
   } else if (i == 1) {
       System.out.println("O número "+i+" não é primo!");
   } else {
       System.out.println("O número "+i+" não é primo!");
   }
   
   
                
   }
 }
}
Responder

03/04/2013

Douglas Eric

Parabens psychovr :evil: :evil: :evil: Só faltou as tags code. :( http://javafree.uol.com.br/topic-870315-Tag-CODE-do-forum.html
Responder

03/04/2013

Douglas Eric

[quote="psychovr"]ae mano, também sou iniciante no java, e encarei sua dúvida como um desafio, fiz esse código e pra mim deu tudo certo: class TestesPrimos { public static void main(String[] args) { Scanner s = new Scanner(System.in); int cont = 1; while (cont != 0) { System.out.print("Informe um número: "); int i = s.nextInt(); if (i % 2 != 0 & i % 3 != 0){ System.out.println("O número "+i+" é primo!"); } else if (i == 2 ^ i == 3) { System.out.println("O número "+i+" é primo!"); } else if (i == 0){ System.out.println("Insira um número maior que 0!"); } else if (i == 1) { System.out.println("O número "+i+" não é primo!"); } else { System.out.println("O número "+i+" não é primo!"); } } } }
mas testou com números maiores que 24? 25, 35, 49, 55 não são primos! Idem demais números com fatores 5, 7, 11, 13,... 1 também não é primo, mas o teste em questão não é executado. E porque fazer um [color=blue]if[/color] da seguinte forma? Vai sempre mostrar o mesmo resultado independente da condição:
if (i == 1) {
    System.out.println("O número "+i+" não é primo!");
} else {
    System.out.println("O número "+i+" não é primo!");
}
Responder

03/04/2013

Douglas Eric

[quote="psychovr"]ae mano, também sou iniciante no java, e encarei sua dúvida como um desafio, fiz esse código e pra mim deu tudo certo: class TestesPrimos { public static void main(String[] args) { Scanner s = new Scanner(System.in); int cont = 1; while (cont != 0) { System.out.print("Informe um número: "); int i = s.nextInt(); if (i % 2 != 0 & i % 3 != 0){ System.out.println("O número "+i+" é primo!"); } else if (i == 2 ^ i == 3) { System.out.println("O número "+i+" é primo!"); } else if (i == 0){ System.out.println("Insira um número maior que 0!"); } else if (i == 1) { System.out.println("O número "+i+" não é primo!"); } else { System.out.println("O número "+i+" não é primo!"); } } } }
Amigo, infelizmenteseu código está errado, por exemplo, se você usar seu algoritmo para imprimir todos os números primos entre 2 e 120, vão aparecer vários multiplos de 5 e de 7. Sugiro você a implementar o crivo de Erastótenes, abaixo está uma implementação, baseada no pseudo código da wikipedia:
public static boolean isPrime(int number) {
	if (number < 2) {
		return false;
	}
	boolean[] primes = new boolean[number];
	for (int i = 2; i <= number; i++) {
		primes[i - 1] = true;
	}
	int root = (int) Math.sqrt(number);
	for (int i = 2; i <= root; i++) {
		if (primes[i - 1]) {
			int square = i * i;
			for (int j = square, n = 0; j <= number; n++, j = square + n * i) {
				primes[j - 1] = false;
			}
		}
	}
	return primes[number - 1];
}
Responder

03/04/2013

Douglas Eric

Bem... eu estava parabenizando a iniciativa. Não tive tempo de testar o código. Mesmo assim, ainda está de parabens por ter aceitado o desafio. (só falta as tags code)
Responder

04/04/2013

Douglas Eric

[quote="sekkuar"]Bem... eu estava parabenizando a iniciativa. Não tive tempo de testar o código. Mesmo assim, ainda está de parabens por ter aceitado o desafio. (só falta as tags code)
testar? Pelo código só testa se o número é divisível por 2 e por 3 - concordo que a notação usada não facilita...
Responder

04/04/2013

Douglas Eric

[quote="cfh"] testar? É só olhar o código para ver que somente olha se o número é divisível por 2 e por 3 - concordo que a notação usada não facilita...
Eu nem leio código que está sem as TAGs Estava na esperança que ele editasse, mas.... :(
Responder

04/04/2013

Douglas Eric

[quote="sekkuar"][quote="cfh"] testar? É só olhar o código para ver que somente olha se o número é divisível por 2 e por 3 - concordo que a notação usada não facilita...
Eu nem leio código que está sem as TAGs Estava na esperança que ele editasse, mas.... :(
desconfio que não vai ficar muito melhor com as tags... "(i ==2 ^ i == 3)" parece até C
Responder

24/04/2016

Douglas Eric

Integer num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite um número inteiro: ")); int primo = 0; for( int cont=1; cont <= num; cont++){ if((num % cont) == 0){ primo++; } } if(primo == 2){ JOptionPane.showMessageDialog(null, "O número "+ num + " é primo!"); }else{ JOptionPane.showMessageDialog(null, "O número "+ num + " não é primo!"); }
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira