[java]Reconocimiento de números primos en array

Iniciado por Wick3D, 24 Diciembre 2016, 00:56 AM

0 Miembros y 1 Visitante están viendo este tema.

Wick3D

Buenas a todos. Estoy practicando ya que llevo un poco mal el tema arrays y terminé el siguiente programa que rellena un array con numeros aleatorios.

Código (java) [Seleccionar]
import java.util.Scanner;
import java.util.Random;

    public class NumerosPrimos {
        public static void main(String[] args) {

            Random rnd = new Random();
            Scanner input = new Scanner(System.in);
            int num;

            System.out.println("Introduce longitud del array");
            num = input.nextInt();

            int[] numPrimo = new int[num];          //En este punto,la longitud del array es dado por la variable num.

            for (int i = 0; i < numPrimo.length; i++) {
                numPrimo[i] = rnd.nextInt(11);      //Genera numeros aleatorios entre 1 y 10
                if (numPrimo[i] % 2 == 0) {             //calcula el contenido de la posicion del array entre 2
                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " NO es un primo");
                }else {
                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " es primo");
                }
            }
        }
    }


El prorama funciona correctamente por la salvedad de que el 2 no me lo reconoce como número primo. ¿Alguna idea de como podría solventarlo?. Sé que será una tonteria pero quiero tener los fundamentos bien aprendidos antes de adentrarme en algo mas denso.

Gracias de antemano por cualquier respuesta posible. Saludos.

engel lex

#1
no se java, pero se algoritmia y matemática... y esto está mal terriblemente

Código (java) [Seleccionar]
               if (numPrimo[i] % 2 == 0) {             //calcula el contenido de la posicion del array entre 2
                   System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " NO es un primo");
               }else {
                   System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " es primo");
               }



según tu todo impar entre 1 y 10 es primo... como el 9? o el 1?

recomiendo lectura sobre que son los números primos...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

crack81

Tu algoritmo solo sirve para calcular si un numero es Par pero NO para comprobar si un numero primo, debes recordar que los numeros primos son aquellos numeros que solo pueden ser dividos entre 1 y ellos mismo  exceptuando el numero 2


ejemplo:

2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97

Tu programa estaria validando como numeros primos a valores como el numero 9.
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

kingcreek

Si es por el manejo de array vas bien, unicamente como te comentan calculas mal si un numero es primo o no, aun asi te dejo el arreglo del codigo.
He separado el calculo de numero primo en un metodo aparte para que veas como es, y cambiado la condicion del if.

Código (java) [Seleccionar]

import java.util.Scanner;
import java.util.Random;

    public class NumerosPrimos {
        public static void main(String[] args) {

            Random rnd = new Random();
            Scanner input = new Scanner(System.in);
            int num;

            System.out.println("Introduce longitud del array");
            num = input.nextInt();

            int[] numPrimo = new int[num];          //En este punto,la longitud del array es dado por la variable num.

            for (int i = 0; i < numPrimo.length; i++) {
                numPrimo[i] = rnd.nextInt(11);      //Genera numeros aleatorios entre 1 y 10
                if (!calcularSiEsPrimo(numPrimo[i])) {             //calcula si el numero es primo o no
                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " NO es un primo");
                }else {
                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " es primo");
                }
            }
        }
         
         
          static boolean calcularSiEsPrimo(int n) {
            if(n==2) return true; //si es dos, directamente retorna true, ya que 2 es numero primo
            if (n%2==0) return false; //se comprueba si es multiplo de dos
            for(int i=3;i*i<=n;i+=2) { // de no serlo, se comprueba si es divisible entre un numero impar
              if(n%i==0) { return false; }// si no es primo, devuelve false
            }
            return true; // y si lo es, devuelve true
          }
    }