Autor Tema: java y primos :)  (Leído 364 veces)

theteam

  • Miembro Avanzado
  • ****
  • Mensajes: 180
  • Sistema Operativo:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
java y primos :)
« en: Febrero 14, 2010, 11:41:10 »
bueno, necesitaba un algoritmo que dado un numero me consiga el numero primo >= que ese numero mas cercano. esto para utilizar en las tablas hash (see, estoy preparando ED xD). busque algo en internet, pero no me gusto lo que encontre, seguro que hay algo que me sirva, pero bueh, lo hice yo a manopla. lo pongo aca para que, si quieren, lo vean y me digan si hay algun error, o si se puede hacer mas eficiente.

pongo el codigo:
Código: [Seleccionar]
/**
     * dado un numero (no necesariamente primo) calcula el siguiente primo (o devuelve n si este es primo)
     * @param n numero a probar
     * @return numero primo>=n mas proximo de n
     */
    public int proxPrimo (int n)
    {
        if (n==1)
            n+=2; //si es uno lo descarto, asique lo pongo en 3
        if (n%2==0)
            n++; //si es par, lo pongo impar, asi puedo ir de 2 en 2 y es mas eficiente
        int i;
        boolean encontre;
        for (i=n;;i+=2) //este for se ejecuta siepre hasta que se devuelva un numero
        {
            if (i==3)
                return i; //si es 3, es primo, lo devuelvo
            if (i%3==0)
                continue; //si es divisible por 3 (por 2 ya sabemos que no porque voy de a 2), no es primo, paso al siguiente
            int max=(int) Math.sqrt(i); //calculo la raiz del numero a buscar, porque si es primo basta con comprobar si es div hasta la raiz del numero
            encontre=true;
            for (int j=5; j<=max;j+=2)
                if (i%j==0)
                {
                    encontre=false;
                    break; //si n es divisible por j, ya no es primo, no necesito seguir buscando
                }
            if (encontre)
                return i;
        }
    }

a mi me gusto como quedo  :-[ jajaja
pd: este post va principalmente para el matematico nico, que seguro que algo me va a corregir xD

Un foro para todos

java y primos :)
« en: Febrero 14, 2010, 11:41:10 »

niko

  • Administrador
  • Miembro Experto
  • *
  • Mensajes: 483
  • Sexo: Masculino
  • Sistema Operativo:
  • Windows XP Windows XP
  • Navegador:
  • Firefox 3.5.7 Firefox 3.5.7
    • Ver Perfil
Re:java y primos :)
« Respuesta #1 en: Febrero 14, 2010, 01:04:34 »
theteam: Hasta dónde yo vi, está bastante bien. Las dos cosas que yo corrigiría son:
1. El for sin corte para mí está perfecto, pero en las universidades no les gusta generalmente.
2. No veo qué tiene de especial el 3 para que lo tomes como un caso particular, xD.

Si el tamaño del número tuviera límite, tal vez se podría encontrar un algoritmo más eficiente, pero supongo que tu versión era la que se esperaba.