Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Wick3D en 24 Diciembre 2016, 00:56 am



Título: [java]Reconocimiento de números primos en array
Publicado por: Wick3D en 24 Diciembre 2016, 00:56 am
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
  1. import java.util.Scanner;
  2. import java.util.Random;
  3.  
  4.    public class NumerosPrimos {
  5.        public static void main(String[] args) {
  6.  
  7.            Random rnd = new Random();
  8.            Scanner input = new Scanner(System.in);
  9.            int num;
  10.  
  11.            System.out.println("Introduce longitud del array");
  12.            num = input.nextInt();
  13.  
  14.            int[] numPrimo = new int[num];          //En este punto,la longitud del array es dado por la variable num.
  15.  
  16.            for (int i = 0; i < numPrimo.length; i++) {
  17.                numPrimo[i] = rnd.nextInt(11);      //Genera numeros aleatorios entre 1 y 10
  18.                if (numPrimo[i] % 2 == 0) {             //calcula el contenido de la posicion del array entre 2
  19.                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " NO es un primo");
  20.                }else {
  21.                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " es primo");
  22.                }
  23.            }
  24.        }
  25.    }

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.


Título: Re: [java]Reconocimiento de números primos en array
Publicado por: engel lex en 24 Diciembre 2016, 01:18 am
no se java, pero se algoritmia y matemática... y esto está mal terriblemente

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


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 (https://es.wikipedia.org/wiki/Número_primo)...


Título: Re: [java]Reconocimiento de números primos en array
Publicado por: crack81 en 24 Diciembre 2016, 01:27 am
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.


Título: Re: [java]Reconocimiento de números primos en array
Publicado por: kingcreek en 26 Diciembre 2016, 16:59 pm
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
  1. import java.util.Scanner;
  2. import java.util.Random;
  3.  
  4.    public class NumerosPrimos {
  5.        public static void main(String[] args) {
  6.  
  7.            Random rnd = new Random();
  8.            Scanner input = new Scanner(System.in);
  9.            int num;
  10.  
  11.            System.out.println("Introduce longitud del array");
  12.            num = input.nextInt();
  13.  
  14.            int[] numPrimo = new int[num];          //En este punto,la longitud del array es dado por la variable num.
  15.  
  16.            for (int i = 0; i < numPrimo.length; i++) {
  17.                numPrimo[i] = rnd.nextInt(11);      //Genera numeros aleatorios entre 1 y 10
  18.                if (!calcularSiEsPrimo(numPrimo[i])) {             //calcula si el numero es primo o no
  19.                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " NO es un primo");
  20.                }else {
  21.                    System.out.println("La posicion [" + i + "] con el numero " + numPrimo[i] + " es primo");
  22.                }
  23.            }
  24.        }
  25.  
  26.  
  27.          static boolean calcularSiEsPrimo(int n) {
  28.            if(n==2) return true; //si es dos, directamente retorna true, ya que 2 es numero primo
  29.            if (n%2==0) return false; //se comprueba si es multiplo de dos
  30.            for(int i=3;i*i<=n;i+=2) { // de no serlo, se comprueba si es divisible entre un numero impar
  31.              if(n%i==0) { return false; }// si no es primo, devuelve false
  32.            }
  33.            return true; // y si lo es, devuelve true
  34.          }
  35.    }
  36.