Java - Clase Numeros Primos, duda

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Clase Numeros Primos, duda

Publicado por juanma (3 intervenciones) el 04/11/2018 11:08:40
Hola a todos llevo poco aprendiendo java, estaba intentando crear un codigo que me diera numeros primos y no lo termino de conseguir. Buscando ejemplos, encontré este codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class pruebaprimos {
 
	public static void main(String[] args) {
        int cont=0;
        for (int j=1;j<=100;j++){
			for (int i=1;i<=100;i++){
                if (j%i==0){
                    cont=cont+1;
 
                }
 
			}
			if(cont==2){
                System.out.println(j);
 
			}
			cont=0;
        }
 
    }
 
}

Funciona perfectamente y no entiendo como. El crea dos bucles for que corren paralelos incrementando el valor de i de j. Luego con el if mira si al dividirlos entre ellos su resto da 0, si es asi, a continuación incrementa el valor de la variable cont en 1 y luego dice en el otro if que si cont vale dos imprima en pantalla el valor de j, para a continuación volver a darle a cont el valor 0.

Siempre que dividimos dos números iguales entre si el resto nos da 0, con lo que la variable cont se incrementa siempre en 1. En que momento cont valdría 2 ????

Que relación tiene cont con saber si 3, 5 , 7 son primos?? el siempre divide un mismo numero por si mismo con lo que el resto siempre da 0

Alguien ve donde ando perdido??

un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Clase Numeros Primos, duda

Publicado por Rakan (43 intervenciones) el 04/11/2018 12:43:14
Tienes un bucle con un bucle dentro, el bucle de fuera especifica que numero se está analizando, mientras que el bucle de dentro lo analiza con todos los valores del rango. Cuando encuentra que el residuo del valor que se está analizando con el del bucle interno es 0, añade 1 a cont. Cont siempre va a tener al menos 2 valores (al dividir el valor del bucle de fuera entre 1 y entre si mismo), por lo que en caso de que solo se pueda dividir entre 1 y si mismo es un numero primo, en caso de que pueda dividirse por más, no és primo. Te dejo un código que lo deja bastante claro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
    final int RANGO = 100;
    int cont=0;
    for (int j=1;j<=RANGO;j++){
        System.out.println("Analizando valor: " + j);
        for (int i=1;i<=RANGO;i++){
            if (j%i==0){
                System.out.println(j + " % " + i + " = 0");
                cont=cont+1;
                System.out.println("Tras sumar 1 a cont, cont tiene el siguiente valor:" + cont);
            }
        }
        if(!(cont>2)){
            System.out.println(j + " es primo.");
        }
        cont=0;
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Clase Numeros Primos, duda

Publicado por juanma (3 intervenciones) el 04/11/2018 16:46:06
Ya lo entendí, mi manera de entender los dos bucles es errónea, después de ejecutar tu código vi la luz, prepare esta chapucilla pa convencerme:
1
2
3
4
5
6
7
8
9
10
11
12
public class bb {
 
	public static void main(String[] args) {
		for (int i = 0; i<100; i++) {
			for (int j = 0; j<100; j++) {
                System.out.println("primer for" + i + " segundo for" + j);
			}
 
        }
 
    }
}
Ahora veo lo que tu me explicas, en cada repetición cada numero se divide por otros cien números. De locos!!!!
muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Clase Numeros Primos, duda

Publicado por Billy Joel (874 intervenciones) el 04/11/2018 14:31:36
Yo lo resuelvo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
 * Retorna los números primos que se encuentren en el rango dado
 *
 * @param rango
 * @return
 */
public int[] getPrimos(int rango) {
    List<Integer> primos = new ArrayList();
    for (int i = 2; i < rango; i++) {
        boolean isPrimo = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                isPrimo = false;
                break;
            }
        }
        if (isPrimo) {
            primos.add(i);
        }
    }
    int[] a = new int[primos.size()];
    for (int i = 0; i < a.length; i++) {
        a[i] = primos.get(i);
    }
    return a;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Clase Numeros Primos, duda

Publicado por juanma (3 intervenciones) el 04/11/2018 16:47:31
gracias, no lo entiendo del todo pero le echare un rato...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar