[RESOLVIDO] Problemas com primeiros N números primos

2 respostas
R

Olá pessoal, sou novo em Java e este é meu primeiro post.
Preciso fazer um algoritmo que imprima os primeiros N números primos. O usuário deve infomar o valor de N.

Olha como ele está

package num_primos;

import java.text.DecimalFormat;
import javax.swing.JOptionPane;


public class Num_Primos {


    public static void main(String[] args) {
        int N, i=1;
        double x=2,  Divisor=2, Quociente;
        String Impressao="";
        
        DecimalFormat df = new DecimalFormat("#,##0");
        
        N = Integer.parseInt(JOptionPane.showInputDialog("Digite o número de primos que serão imprimidos:"));
    
        if (N <= 0){
            JOptionPane.showMessageDialog (null,"Valor inválido. Imprima pelo menos um número primo.");  
        } else {
        
        while (i <= N){
            for (;Divisor < x;) {
                Quociente = x % Divisor;
                if (Quociente == 0) {
                    x++;
                } else { Divisor++;}}
                
             for (;Divisor==x;) {
                Quociente = x % Math.sqrt(x);
                if (Quociente != 0) {
                    Impressao += "\n" + i + "º - " + df.format(x);
                    i++;
                    Divisor++;}}
                    x++; 
                    Divisor=2;
        }
        JOptionPane.showMessageDialog (null,"Os " + N + " primeiros números primos são:" + Impressao);
        }
    }
}

Ao pedir que sejam imprimidos os primeiros 30 primos, ele está imprimindo valores que não são primos, vejam:

Os 30 primeiros números primos são:
1º - 2
2º - 3
3º - 5
4º - 7
5º - 11
6º - 13
7º - 17
8º - 19
9º - 23
10º - 27
11º - 29
12º - 31
13º - 35
14º - 37
15º - 41
16º - 43
17º - 47
18º - 53
19º - 59
20º - 61
21º - 67
22º - 71
23º - 73
24º - 79
25º - 83
26º - 87
27º - 89
28º - 95
29º - 97
30º - 101

Como posso solucionar este problema? :?: Acho que há algum erro nas condições. Por favor, me ajudem.

2 Respostas

R

amigo é simples!

int primos=0;
int x=0;

while(primos<31){

x++;

int y=x-1;

while(y>0){

int resto= x%y;

if(resto==0){

primos++;

System.out.println(x);

break;

}else{

y;

}

}

}

fica mais ou menos assim corrigir os erros de sintaxe, mas isso deve resolver oque voce precisa, desculpa o portugues estou com teclado americano e desacostumei kkkk
t+

R

Conversei com um colega da faculdade, e ele me explicou como o código dele calculava para saber se um determinado número é primo ou não. Ele utilizou o método static public boolean . Como ainda não sei como utilizar esses métodos, fiz de um modo que não precisase dele, mas utilizando algumas das idéias dele e fazendo modificações, e consegui resolver o problema. :D
Ficou assim:

public static void main(String[] args) {
        int N, i=1;
        double x=2,  Divisor;
        String Impressao="";
        boolean Primo = true;
        
        
        DecimalFormat df = new DecimalFormat("#,##0");
        
        N = Integer.parseInt(JOptionPane.showInputDialog("Digite o número de primos que serão imprimidos:"));
    
        if (N <= 0){
            JOptionPane.showMessageDialog (null,"Valor inválido. Imprima pelo menos um número primo.");  
        } else {
        
        while (i <= N){
            for (Divisor = 2;Divisor <= (x/2); Divisor++) { //o Divisor só precisa ir até a metade do valor de x.
                if (x % Divisor == 0) {
                    Primo  = false;
                    break;}}
            
            if (Primo == true) {
               Impressao += "\n" + i + "º - " + df.format(x);
                    i++;   
                    x++;}
            else {
                x++;
                Primo = true;}
            }
             
          
        JOptionPane.showMessageDialog (null,"Os " + N + " primeiros números primos são:" + Impressao);
        
        }
        
    }
}

Agora só falta fazer o teste de mesa para o calculo dos 20 primeiros primos. :?

Criado 30 de março de 2012
Ultima resposta 31 de mar. de 2012
Respostas 2
Participantes 2