-1

necesito ayuda para realizar un programa en Java en el que se introduzca una posición y me devuelva el número primo al que pertenece dicha posición.
Ej: si introduzco la posición 6, me devuelva el número 13; si introduzco 2 , me devuelva 3.
No sé muy bien cómo enfocarlo. Gracias!

Buenas otra vez. Esto es lo que he conseguido. Con esto logro que me muestre números primos hasta el número que yo introduzco pero lo único que necesito es que me muestre el único primo de la posición que yo le indico.

    package numPrimosC;
    import java.util.Scanner;
    public class NumPrimosC{
    public static void main(String[] args) {
        Scanner e = new Scanner (System.in);
        int desde = 2;
        int hasta = 999983;
        boolean esPrimo;
        int cp=0;
        int nb=0;
        int ip=0;
        int vp[]= new int[hasta];
        int k=0;
        System.out.println("Introduce posición: ");
        nb=e.nextInt();


        for (int i = desde; i <= hasta; i++) {
            esPrimo = true;

            for (int j = 2; j <= Math.sqrt(i) && esPrimo; j++) {
                if (i % j == 0) {
                    esPrimo = false;
                }
            }
            if (esPrimo && cp<nb){ 

                esPrimo=true;
                cp++;
                System.out.println(i);
            }
        }
     }
}

Mi idea es almacenar los primos que va sacando el bucle y al final visualizar el último del array. Pero no consigo almacenarlos en un array.

Creo que lo he solucionado...

    package numPrimosC;
    import java.util.Scanner;
    public class NumPrimosC{
    public static void main(String[] args) {
        Scanner e = new Scanner (System.in);
        int desde = 2;
        int hasta = 999983;
        boolean esPrimo;
        int cp=0;
        int nb=0;
        int ip=0;
        int n=0;
        int k=0;
        System.out.println("Introduce posición: ");
        nb=e.nextInt();
        int vp[]= new int[nb];

        for (int i = desde; i <= hasta; i++) {
            esPrimo = true;

            for (int j = 2; j <= Math.sqrt(i) && esPrimo; j++) {
                if (i % j == 0) {
                    esPrimo = false;
                }
            }
            if (esPrimo && cp<nb){ 

                esPrimo=true;
                cp++;
                k=i;
                vp[n++]=k;
            }if(cp>=nb){
                break;
            }
        }System.out.println(vp[vp.length-1]);
     }
  }  

Creo que se puede inicializar el vector con otro tamaño superior.

edoman
  • 1
  • 1
  • 9
  • Pues buscando información sobre el algoritmo (montones de página), impleméntandolo y haciendo una pregunta *específica* sobre *problemas de programación* cuando tengas un problema en **tu programa**. Revisa [help] y [ask]. – SJuan76 Sep 27 '17 at 12:48
  • Para poder ayudarte tienes que realizar una pregunta de calidad. Deberías leer [ask] y [tour] para realizar una buena pregunta y así podremos ayudarte. – Pablo Simon DiEstefano Sep 27 '17 at 12:49
  • Edoman. Haz una funcion que vaya buscando primos (hay mil por google) y cada vez que encuentre uno, incremetnas un contador. Cuando ese contador llegue al numero que pasaste a la funcion, entonces para el loop (o el call si es recursivo) y coge el ultimo primo encontrado. Tambien puedes usar memoization para no tener que cargar cada vez todos los primos. Intenta hacerlo y si tienes erroerrs de codigo o problemas especificos, preguntalos aqui siguiendo [ask]. Un saludo – lois6b Sep 27 '17 at 13:20
  • https://es.stackoverflow.com/questions/96727/porque-mi-algoritmo-no-funciona-con-cantidades-m%c3%a1s-grandes/96735#comment179356_96735 En este enlace hay mucha información al respecto – isaac Sep 28 '17 at 05:41
  • Hola, gracias a los que me habéis contestado. Ha sido de ayuda. Pedir disculpas ya que es la primera pregunta que realizo en condiciones. He modificado la pregunta. – edoman Sep 29 '17 at 07:13
  • @edoman, lee el artículo que mencione anteriormente (96727), especifica como calcular números primos y como almacenarlos de forma eficiente – isaac Sep 29 '17 at 16:09

1 Answers1

0

Podrías hacer una subrutina que averigüe los números primos con un bucle, y que se pare cuando llegue al número deseado:

int i = 0;
int pos = 4; // Quiero el número cuarto
int now = 0; // El último número primo
int nex = 1; // El siguiente para averiguar

while(true){// Un bucle infinito
//Aquí la subrutina para averiguar si *nex* es primo o no
  if(){
  // Si *nex* es primo, se guarda como now
    now = nex;
    i++; //Se obtiene la posición del último número primo
    if(i == pos){
      break; // Si la posición coincide con la petición, se sale de while con break
    }
  }else{
nex++
}}

System.out.printIn("El número primo de la posición " + pos + " es " + now);

Es como la propuesta de @lois6b♦ hecha código

Néstor Llop
  • 147
  • 1
  • 1
  • 10