Что за встроенная функция, которая находит следующий по величине простое число в Java? - PullRequest
6 голосов
/ 11 июля 2011

Предоставляет ли Java API функцию, которая вычисляет следующее наибольшее простое число с учетом ввода x?

Ответы [ 6 ]

5 голосов
/ 12 июля 2011

Существует BigInteger.nextProbablePrime(), который может подойти, если вы работаете с большими целыми числами.В противном случае вы можете написать свой собственный достаточно легко.Вот тот, который я подготовил ранее:

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;
}

. Для пропуска по кратным числам 2 и 3 используется колесо 2, 4. Вам понадобится простой метод тестирования:возвращает true, если его параметр прост, false в противном случае.

5 голосов
/ 11 июля 2011

Это был бы довольно эзотерический метод, и не очень хороший кандидат для включения в общую библиотеку классов.Вам необходимо написать это самостоятельно, используя test или sieve .

4 голосов
/ 11 июля 2011

Да, такой функции действительно нет!

1 голос
/ 04 мая 2016

Java java.math.BigInteger класс содержит метод nextProbablePrime () для проверки простоты числа.

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());
            }
}

Вывод: 89 следующий простой83

Для получения дополнительной информации см. мой блог:
http://javaexplorer03.blogspot.in/2016/05/generate-next-prime-of-number-in-java.html

0 голосов
/ 11 июня 2014

Primes.nextPrime(int n) из Apache Commons Math - это то, что вам нужно.

0 голосов
/ 24 января 2013
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");
    }
  }

}

...