Простые числа Java BigInteger

Я использовал объекты Входа Библиотеки Предприятия. Это позволяет Вам иметь различные типы входа (плоский файл, электронная почта и/или база данных). Это довольно настраиваемо и имеет довольно хороший интерфейс для обновления Вашего web.config для конфигурации входа. Обычно я называю свой вход от На Ошибке в Global.asax.

Вот ссылка на MSDN

7
задан Reg 28 December 2015 в 08:13
поделиться

2 ответа

BigInteger.probablePrime (bitLength, random) возвращает (вероятное) простое число указанной длины в битах. Это означает максимальное значение 2 ^ bitlength - 1 и минимум 2 ^ (bitlength - 1). Как бы я ни ненавидел это как ответ, это, вероятно, ваш лучший выбор, если вы не хотите начать углубляться в теорию чисел.

Что вам нужно сделать, так это выяснить длины битов, которые требует ваш диапазон, а затем передать их в probablePrime () , пока вы не вернете простое число в правильном диапазоне.

2
ответ дан 7 December 2019 в 12:21
поделиться

Ответ jprete хорош, если ваше отношение max / min не близко к 1.

Если у вас узкий диапазон, лучше всего, вероятно, просто сделать что-то вроде следующего:

// this is pseudocode:
//
// round min down to multiple of 6, max up to multiple of 6
min6 = floor(min/6);
max6 = ceil(max/6);
maybePrimeModuli = [1,5];
do 
{
   b = generateRandom(maybePrimeModuli.length);
   // generate a random offset modulo 6 which could be prime
   x = 6*(min6 + generateRandom(max6-min6)) + b;
   // generate a random number which is congruent to b modulo 6
   // from 6*min6 to 6*max6-1
   // (of the form 6k+1 or 6k+5)

   // the other choices 6k, 6k+2, 6k+3, 6k+4 are composite 
} while not isProbablePrime(x);

Плотность простых чисел в целом довольно высока, в основном это 1 в log (x), поэтому вам не придется повторять слишком много раз, чтобы найти простое число. (просто в качестве примера: для чисел около 10 23 в среднем одно из 52 целых чисел является простым числом. Приведенный выше код беспокоит только 2 из каждых 6 чисел, так что вы закончите цикл в среднем 17 раз для чисел около 10 23 .)

Просто убедитесь, что у вас есть хороший тест на простоту, а в Java BigInteger он есть.

В качестве упражнения для читателя,

3
ответ дан 7 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: