feed twitter facebook LinkedIn facebook

Java » Números primos en Java

noviembre 26, 2006 por Víctor Cuervo 219 Comentarios Imprimir Imprimir

Un número primo es aquel número que solo es divisible por si mismo y por la unidad. Por convención se asume que el número 1 es también primo. Así, los veinte primeros números primos son: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67 y 71.

Veamos como podemos implementar un algoritmo en Java que nos permita saber si dado un número, saber si este es un número primo o no.

Lo primero que haremos será definir una función que reciba un entero como parámetro (que será el número a conocer) y devolverá un booleano indicando si el número es primo o no.

  1. public boolean esPrimo(int numero) { ... }

Lo que vamos a hacer es recorrer todos los números entre el 2 y el número sobre el que queremos saber si es primo o no. Dentro del bucle comprobaremos el principio del número primo. "Divisible por si mismo y la unidad". Es decir, que si encontramos un número que es divisible por el número evaluado, este dejará de ser primo.

Por ejemplo, el número 10 no es primo. Ya que 10 es divisible por 2 y 5. Esto, expresado en términos matemáticos vendría a decir, que el resto entre los dos números es 0. Veamoslo:

  1. 10/2 = 5, resto 0
  2. 10/5 = 2, resto 0

La función que nos ayuda a conocer el resto entre dos números es el modulo. Y en Java se representa con el tanto por ciento. Así:

  1. 10%2 = 0
  2. 10%5 = 0
  3. 10%3 = 1 (Ya que 10/3 = 3 y el resto es 1)

Por lo tanto, dentro del bucle comprobamos el módulo del número a evaluar con el del contador. Si el módulo es distinto de 0 cambiaremos una variable semáforo a false. Esta variable indicará que el número evaluado ya no es primo y nos servirá para salir del bucle.

Veamos el código:

  1. int contador = 2;
  2. boolean primo=true;
  3.  
  4. while ((primo) && (contador!=numero)){
  5. if (numero % contador == 0)
  6. primo = false;
  7. contador++;
  8. }

Al ver este código podemos ver que con la variable de control asumimos que el número a evaluar es primo. Esta variable será la que devolvamos como retorno de la función:

  1.  
  2. return primo;
  3.  

Otra cosa interesante es que para evaluar los números que hay entre el 2 y el número sobre el que queremos saber si es primo podemos hacerlo de dos formas:

  1. Ir desde el 2 a el número. De forma ascendente.
  2. Ir del número a el 2. De forma descendente.

Cabe señalar que en este caso es mejor el primer punto, ya que encontraremos un divisor antes yendo de los números pequeños a los grandes. Por consiguiente evitaremos ciclos de procesamiento y la respuesta será más rápida.

El código sería el siguiente:

  1. public static boolean esPrimo(int numero){
  2. int contador = 2;
  3. boolean primo=true;
  4. while ((primo) && (contador!=numero)){
  5. if (numero % contador == 0)
  6. primo = false;
  7. contador++;
  8. }
  9. return primo;
  10. }

Estos algoritmos son de un gran coste computacional, sobre todo si se quiere hacer sobre números muy grandes. Por ejemplo, el algoritmo de seguridad RSA basa el calculo de la clave publica en la multiplicación de dos números primos mayores de 10100. Característica que lo hace ser seguro.

Esta claro que nuestro código no es que sea un código para pruebas computacionales CPU intensivas. Pero alguna mejora podemos tener en nuestro código. Y es que una de las características de los números primos es que nunca tendremos un número primo que sea par. Eso quiere decir que si el número a evaluar es par, directamente lo podemos descartar, por lo cual recuperaremos ciclos computacionales.

Para saber si un número es par podemos utilizar la función del módulo. Y es que si el número dividido entre 2 da un resto de 0, entonces este número es par.

A nuestro anterior código le añadiremos la siguiente línea de código:

  1. if (numero%2==0)
  2. return false;
Descargar el Codigo
Descargar el código
Error en el Codigo
Error en el código
Foro sobre Java Básico
Foro sobre Java Básico
tags: , , ,

Artículos relacionados:

219 comentarios »

RSS feed para los comentarios de esta entrada. TrackBack URI

1 2 3 22
  1. arianna
    enero 27, 2007 #

    como realizar un algoritmo de los numeros primos en c#

  2. Roberta Triviña
    febrero 25, 2007 #

    Calcular un numero primo

  3. Martha Alvarez
    marzo 31, 2007 #

    cuando un numero es divisible por siete y por once.

  4. anyela
    abril 9, 2007 #

    por favor algoritmo que dado un numero primo me calcule el primo siguiente inmediato

  5. cia
    abril 17, 2007 #

    hola ayuda urgente nesecito aprender codigo en c++ porfavor!!!

  6. Orieta
    abril 22, 2007 #

    me gustaria saber como podria hacer numeros primos ,capicua y perfectos y ala vez convertir estos en letras en romanos ,invertido y factorial y tambien presentarlo en forma ascendente y descendente pero me pidireon en netbeans ,me gustaria q me ayudes por favor o almenso indicarme como mas menos lo podria hacer graxias .

  7. Orieta
    abril 22, 2007 #

    me gustaria hacerlo pero en netbeans o en jbuilder ok graxias

  8. ORLANDO
    abril 26, 2007 #

    QUIERO HACER UN PROGRAMA CON PASCAL QUE AL INGRESAR EL NUMERO ME DIGA DESDE EL 0 HASTA EL INGRESADO SI ES NUMERO PRIMO O NO

  9. lis
    abril 28, 2007 #

    hola quiero calcular cualquier numero natural y devolverlo con el mayor numero posible q se pueda formar con sus digitos

  10. Jose
    mayo 3, 2007 #

    // Listador de nros. primos entre 0 y 100 cont ndolos

    #include
    #include

    void main(void)
    { int i,p,sen=0,tp=0;
    float j,n;
    for(i=0;i

1 2 3 22

Deja un comentario

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*