Como ver se o número é primo?
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:
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
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); } } }
Lucas
Curtidas 0
Respostas
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; }
GOSTEI 0
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
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
09/04/2009
não entendi o que faz na seguinte linha:
if ( contador <= 2) {
GOSTEI 0
Guri
09/04/2009
Contador de divisores...
se existirem ate 2 divisores entao....
GOSTEI 0
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
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
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
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
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
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
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
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
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.... :( GOSTEI 0
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
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
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] GOSTEI 0
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