Como ver se o número é primo?

Java

09/04/2009

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
Lucas

Lucas

Curtidas 0

Respostas

Eduardo Chrisotofoletti

Eduardo Chrisotofoletti

09/04/2009

 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 ^^
GOSTEI 0
Lucas

Lucas

09/04/2009

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
GOSTEI 0
João Terceiro

João Terceiro

09/04/2009

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");
	        }	      
	     
	      }  
	        
	   }  
GOSTEI 0
Caio Timm

Caio Timm

09/04/2009

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

Guri

09/04/2009

Contador de divisores... se existirem ate 2 divisores entao....
GOSTEI 0
Maximiller Santos

Maximiller Santos

09/04/2009

cara. um numero só é primo quando a divisao por 1 e ele meso é exata. da uma olhada mais detalhada no seu codigo
GOSTEI 0
Yuri Müller

Yuri Müller

09/04/2009

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!");
   }
   
   
                
   }
 }
}
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

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

Douglas Eric

09/04/2009

[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!");
}
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[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];
}
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

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)
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[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...
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[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.... :(
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[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
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

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!"); }
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[quote="mmrg"]
Seu código pode ser bastante demorado principalmente com números grandes, na casa de dezenas de milhares Veja este código: [url]http://www.staroski.com.br/2013/05/06/java-primos/[/url]
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

[quote="staroski"][quote="mmrg"]
Seu código pode ser bastante demorado principalmente com números grandes, na casa de dezenas de milhares Veja este código: [url]http://www.staroski.com.br/2013/05/06/java-primos/[/url]
Concordo que o código que eu demonstrei demora para número na casa de dezenas de milhares.. MASS.. partindo do princípio que alguém está estudando fazer um algoritmo para números primos, deve ser alguém que está iniciando.. então procurei um código de fácil assimilação.. A primeira coisa q eu teria que explicar é: Pq a classe MAIN não está presente e sim um Booleano.. e por ai vai.. mas obrigada por compartilhar seu código :!:
GOSTEI 0
Douglas Eric

Douglas Eric

09/04/2009

Também sou iniciante no java e encarei o desafio antes de entrar no tópico, o código deu certinho (usando os poucos comandos que sei até agora):
import java.util.Scanner; public class NumerosPrimos { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.println("Digite um número e veremos se ele é primo:"); int num = in.nextInt(); int divisor = 0; int contador = 0; while(divisor < num){ divisor++; if(num % divisor == 0){ contador++; } } if((contador > 2) || (divisor>num)){ System.out.println("Seu número não é primo"); }else{ System.out.println("Seu número é primo"); } } }
@edit Depois que eu postei que vi que nem precisava do if(divisor>num)
GOSTEI 0
POSTAR