2011-07-11 24 views
6

¿La API de Java proporciona una función que calcula el siguiente número primo más grande dada una entrada x?¿Cuál es la función integrada que encuentra el número primo siguiente más grande en Java?

+4

No hasta que escribir uno. –

+0

Creo que alguien de Sun/Oracle debe desarrollar esto; Pruébalo; QA eso; código revisarlo; documentarlo; y traducir la documentación; por algo que se usará RARAMENTE; sería un desperdicio de dinero. – vcsjones

+1

¿Qué tiene que ver tu iphone con esta pregunta? – dave

Respuesta

5

Eso sería un método bastante esotérico, y no es realmente un gran candidato para la inclusión en una biblioteca de clases general. Debería escribir esto usted mismo, usando test o sieve.

+0

tamiz se utiliza para encontrar todos los números primos _less_ que un número particular - en este caso use una prueba :) –

+0

Claro, pero siempre puede generar números primos hasta N * primero *, y luego "siguiente" (debajo de N) se vuelve trivial. :) – dlev

+1

¿por qué sería esotérico? ¿Por qué no es un "gran" candidato para una biblioteca? y ¿por qué hay un método en el JDK que hace exactamente esto? BigInteger.nextProbablePrime(). Creo que no dio la respuesta correcta y estoy seguro de que no dio la solución. –

4

¡Sí, realmente no existe tal función!

3

Hay BigInteger.nextProbablePrime() que pueden ser adecuados si trabaja con números enteros grandes. De lo contrario, puede escribir el suyo con la suficiente facilidad. Aquí está uno que preparé antes:

static long nextPrime(long previous) { 
    if (previous < 2L) { return 2L; } 
    if (previous == 2L) { return 3L; } 
    long next = 0L; 
    int increment = 0; 
    switch ((int)(previous % 6L)) { 
    case 0: next = previous + 1L; increment = 4; break; 
    case 1: next = previous + 4L; increment = 2; break; 
    case 2: next = previous + 3L; increment = 2; break; 
    case 3: next = previous + 2L; increment = 2; break; 
    case 4: next = previous + 1L; increment = 2; break; 
    case 5: next = previous + 2L; increment = 4; break; 
    } 
    while (!isPrime(next)) { 
    next += increment; 
    increment = 6 - increment; // 2, 4 alternating 
    } 
    return next; 
} 

Este utiliza un 4 ruedas 2 para saltar sobre múltiplos de 2 y 3. Se necesita un método de prueba privilegiada:

boolean isPrime(long toTest) { ... } 

que devuelve true si su el parámetro es principal, false en caso contrario.

+1

no es ESA la solución? todos en esta publicación dicen que NO hay ningún método para obtener un número primo, pero sí lo hay. BigInteger.nextProbablePrime() como rossum dice. la gente se burla de la pregunta, diciendo que usted debe hacer su tarea por su cuenta, pero ellos ni siquiera saben la respuesta. –

0
public class nextprime { 

    public static void main(String args[]) { 
    int count = 0; 
    int n = 17; 
    for (int i = 2; i <= n/2; i++) { 
     if (n % i == 0) { 
      count++; 

     } 
    } 
    if (count == 0) { 
     System.out.println("prime"); 
     for (int p = n + 1; p >0; p++) { 
      int y=0; 
      for (int i = 2; i <= p/2; i++) { 
       if (p % i == 0) { 
        y++; 

       } 
      } 
      if(y==0) 
      { 
       System.out.println("Next prime "+p); 
       break; 
      } 
     } 
    } else { 
     System.out.print("not prime"); 
    } 
    } 

}

+0

Por lo que puedo leer esto, esto primero determinará que 17 es realmente primo, que ineficientemente determina que 18 no lo es y luego determina que 19 es. – SWeko

1

Java clase java.math.BigInteger contiene un método nextProbablePrime() para verificar la primalidad de un número.

import java.math.BigInteger; 

public class NextPrime { 

      public static void main(String[] args) { 
         int number = 83; 
         Long nextPrime = nextPrime(number); 
         System.out.println(nextPrime + " next prime to " + number); 

      } 

      /** 
      * method to find next prime 
      * @param number 
      * @return boolean 
      */ 
      private static Long nextPrime(int number) { 
         BigInteger bValue = BigInteger.valueOf(number); 

         /** 
         * nextProbablePrime method used to generate next prime. 
         * */ 
         bValue = bValue.nextProbablePrime(); 

         return Long.parseLong(bValue.toString()); 
      } 
} 

de salida: 89 próximo primer a 83

Para obtener más información, vea mi blog:
http://javaexplorer03.blogspot.in/2016/05/generate-next-prime-of-number-in-java.html

Cuestiones relacionadas