Java - numeros primos javanetbeans

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

numeros primos javanetbeans

Publicado por Moises (2 intervenciones) el 10/12/2017 03:59:49
Buenas noches; por favor una ayuda en la solución de este problema:
// programa que imprime todos los numeros primos de 2 cifras
// usar for

Estoy comenzando y estuve realizándolo de este modo:


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
27
28
29
30
31
package paquete1;
 
import javax.swing.JOptionPane;
 
 
public class Programa19 {
 
    // programa que imprime todos los numeros primos de 2 cifras
    // usar for
 
 
    public static void main(String[] args) {
 
        int n=10;
//        if (n>100) {
//            System.out.println("Numero inválido");
//            return;
//
//        }
        int ndiv=0;
        for (int i = 10; i <=99 ; i++) {
            if(n%i==0);
            ndiv++;
 
            if (ndiv==2)
            System.out.println( n + "numeros primos de 2 cifras");
 
        }
 
    }
}
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
sin imagen de perfil
Val: 349
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

numeros primos javanetbeans

Publicado por Andrés (340 intervenciones) el 10/12/2017 08:57:01
Puedes calcularlos por raíz:

http://www.conoce3000.com/html/espaniol/Libros/Matematica01/Cap07-03-AlgoritmoDeterminarNumeroPrimo.php

O por la criba:

https://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
 *
 * @author andreas
 */
public class Primos {
 
    //Sólo se requieren los primeros primos de dos cifras
    static final int LENGTH = 100;
 
    //Cálculo por raíz
    static void calculaPrimosRaiz() {
 
        //Desde el número 1 al 100
        for (int i = 1; i < LENGTH; i++) {
 
            //Parte entera de la raíz cuadrada
            int valor = (int)Math.sqrt(i);
            //Suponemos es primo
            boolean esPrimo = true;
            //Desde 2 hasta la parte entera
            for(int j = 2 ; j < valor && esPrimo; j++) {
                //Si el numero lo divide                 
                if(0 == (i%j)) {
                    //No es primo
                    esPrimo = false;
                }
 
            }
            //Si fué primo imprimirlo
            if(esPrimo) {
 
                System.out.println(i);
 
            }
 
        }
 
    }
    //Calculo por criba a dos cifras
    static int[] calculaPrimosCriba() {
        //Arreglo de número de 1 a LENGHT
        //400 bytes = LENGTH*4bytes
        int[] numeros = new int[LENGTH];
        //Cifras que sabemos son primos        
        numeros[0] = -1;
        numeros[1] =  1;
        numeros[2] =  2;
        numeros[3] =  3;
        numeros[4] = -1;
        numeros[5] =  5;
        numeros[6] = -1;
        numeros[7] =  7;
        numeros[8] = -1;
        numeros[9] = -1;
        //De 10 a LENGTH
        for (int i = 10; i < LENGTH; i++) {
            //Si i es divisible por 2 o 3 o 5 o 7, el número no es primo 
            //en caso contrario asigna -1 a la posiciún i en números, i. e. el número es primo
            if(0 == i % 2) {numeros[i] = -1;}
            else if(0 == i % 3) {numeros[i] = -1;}
            else if(0 == i % 5) {numeros[i] = -1;}
            else if(0 == i % 7) {numeros[i] = -1;}
            //En caso contrario es primo
            else {numeros[i] = i;}
 
        }
        //regresar el arreglo
        return numeros;
 
    }
    //Imprimir los primos
    static void imprimirPrimos(int[] numeros) {
        //De 1 a LENGTH
        for(int i = 1 ; i < LENGTH ; i++) {
            //Si el valor de números en la posición i no es -1
            if(!(-1 == numeros[i])) {
                //Imprimir el número
                System.out.println(String.format("%d", numeros[i]));
 
            }
 
        }
 
    }
 
    public static void main(String[] args) {
 
        System.out.println("Cálculo por criba (memoria) iniciando.");
 
        //Sólo por curiosidad tomar el tiempo
        long inicio = System.currentTimeMillis();
        //Calcular los primos
        int[] numeros = calculaPrimosCriba();
        //Calcular el tiempo que tomo el calculo
        System.out.println(String.format("El cálculo por criba tomo: %d ms",(System.currentTimeMillis()-inicio)));
        //Imprimir los primos
        imprimirPrimos(numeros);
 
        System.out.println("Cálculo por criba (memoria) finalizado.");
 
        System.out.println("Cálculo por raíz (al vuelo) iniciado");
        //Sólo por curiosidad tomar el tiempo
        inicio = System.currentTimeMillis();
        //Calcular los primos
        calculaPrimosRaiz();
        //Calcular el tiempo que tomo el calculo
        System.out.println(String.format("El cálculo por raíz tomo: %d ms",(System.currentTimeMillis()-inicio)));
 
        System.out.println("Cálculo por raíz (al vuelo) finalizado");
 
    }
 
}

He visto también algunas implementaciones que usan n/2 como cota, es decir en vez de buscar divisores hata la parte entera de la raíz de n, los buscan hasta n/2, también lo puedes hacer así, pero n/2 crece más rápido que raíz de n:

Screenshot-from-2017-12-10-02-00-29
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 15
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

numeros primos javanetbeans

Publicado por Moises (2 intervenciones) el 10/12/2017 11:42:06
Gracias por la ayuda!!
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