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