Eu fiz um aqui e percebi que o seu erro estava no segundo for que não vai até primos e sim até o tamanho de i e na comparação com os if. pois você primeiro compara a divisao dele com o outro é igual a 0 e depois se é diferente de 0, na verdade ele quase sempre vai entrar no segundo if, Explicação:
Imagina que o numero 4.
4%1 = 0;
4%2 = 0;
4%3=1.33;
4%4=0;
Ou seja, na hora em que a sua lógica dividisse o numero 4 por 3 ele automaticamente iria deduzir que o numero era primo e iria imprimir. Então oq eu fiz foi o seguinte.. eu já eliminei todos os numeros pares(Pois nenhum numero par é primo) e depois eu fiz a comparação.
Bem espero que você tenha entendido. qualquer coisa estamos ai!
publicclassTestePrimo{publicstaticvoidmain(String[]args){intnroDivisores=0;// System.out.println("Escolha um Valor inicial:");intprimos=10;for(inti=1;i<=primos;i++){if(i%2!=0){for(intj=1;j<i;j++){if(i%j!=0){System.out.print("O numero "+i+" eh primo");System.out.println();break;}}}}}}
shoko
Primeiramente não sei se voce estava com duvidas na lógica ou em outra coisa, porém eu tentei resolver ou pelo menos modificar.
obs: Não entendi oq voce deseja fazer, eu estou supondo que você deseja encontrar quais os numeros primos até um certo valor.
Eu fiz um aqui e percebi que o seu erro estava no segundo for que não vai até primos e sim até o tamanho de i e na comparação com os if. pois você primeiro compara a divisao dele com o outro é igual a 0 e depois se é diferente de 0, na verdade ele quase sempre vai entrar no segundo if, Explicação:
Imagina que o numero 4.
4%1 = 0;
4%2 = 0;
4%3=1.33;
4%4=0;
Ou seja, na hora em que a sua lógica dividisse o numero 4 por 3 ele automaticamente iria deduzir que o numero era primo e iria imprimir. Então oq eu fiz foi o seguinte.. eu já eliminei todos os numeros pares(Pois nenhum numero par é primo) e depois eu fiz a comparação.
Bem espero que você tenha entendido. qualquer coisa estamos ai!
publicclassTestePrimo{publicstaticvoidmain(String[]args){// System.out.println("Escolha um Valor inicial:");intprimos=25;booleanprimo;for(inti=2;i<=primos;i++){primo=true;for(intj=2;j<i;j++){if(i%j==0){primo=false;break;}}if(primo)System.out.println(i);}}}
F
Fabio_Kobayashi
Acho que é mais ou menos por aí, mas no Interaction foram imprimidos os números ímpares em vez dos primos, acho que é porque não percorreu os números todos anteriores.
Dá uma olhada:
Eu fiz por leitura de teclado
Welcome to DrJava.
> leTeclado lt = new leTeclado()
> lt.imprimeNPrimeirosPrimos()
Escolha um Valor inicial:
100
O numero 3 eh primo
O numero 5 eh primo
O numero 7 eh primo
O numero 9 eh primo
O numero 11 eh primo
O numero 13 eh primo
O numero 15 eh primo
O numero 17 eh primo
O numero 19 eh primo
O numero 21 eh primo
O numero 23 eh primo
O numero 25 eh primo
O numero 27 eh primo
O numero 29 eh primo
O numero 31 eh primo
O numero 33 eh primo
O numero 35 eh primo
O numero 37 eh primo
O numero 39 eh primo
O numero 41 eh primo
O numero 43 eh primo
O numero 45 eh primo
O numero 47 eh primo
O numero 49 eh primo
O numero 51 eh primo
O numero 53 eh primo
O numero 55 eh primo
O numero 57 eh primo
O numero 59 eh primo
O numero 61 eh primo
O numero 63 eh primo
O numero 65 eh primo
O numero 67 eh primo
O numero 69 eh primo
O numero 71 eh primo
O numero 73 eh primo
O numero 75 eh primo
O numero 77 eh primo
O numero 79 eh primo
O numero 81 eh primo
O numero 83 eh primo
O numero 85 eh primo
O numero 87 eh primo
O numero 89 eh primo
O numero 91 eh primo
O numero 93 eh primo
O numero 95 eh primo
O numero 97 eh primo
O numero 99 eh primo
>
rmendes08
Fabio, explique mais em alto nivel o seu algoritmo. Pelo que eu entendi do código, você recebe um número N, e o programa deve imprimir todos os números primos de 2 até N, OK ? E vc faz isso da seguinte maneira, você implementa um laço, e para cada número do intervalo testado você testa o número de divisores, é isso ?
shoko
pronto cara eu arrumei lá encima…
ve se está tudo ok!!
tipo eu tava fazendo errado era o laço que eu estava fazendo errado, e os meus if estavam errados também pois cairia naquele caso do 4 que eu te falei, foi erro meu, me desculpe, espero que você tenha entendido a lógica.
flw
F
Fabio_Kobayashi
Deu certo sim, valeu…
Quando eu precisar de outras dúvidas eu coloco aqui, beleza?
Quando o programa fica pronto parece fácil, mas até chegar lá é que é complicado, valeu!
rmendes08
//imprime os números primos de 2 até algum número N for(inti=2;i<=N;i++){//conta o número de divisores no intervalo fechado [2, N-1]for(intj=2;j<i;j++){if(i%j==0){numeroDivisores++;}}//se o numero de divisores entre 2 e N-1, inclusive, é zero//então N é primoif(numeroDivisores==0){System.out.print("O numero "+i+" eh primo");System.out.println();}//reinicia o contador de divisoresnumeroDivisores=0;}
Aí vai minha sugestão de código. É claro que esse é o pior método para detectar números primos, pois ele testa cada solução. Mas ai você pode pesquisar outros métodos. Qualquer coisa estamos aí.
F
Fabio_Kobayashi
Tenho uma pergunta bem básica, como eu testo no interaction a seguinte classe?