Я использовал объекты Входа Библиотеки Предприятия. Это позволяет Вам иметь различные типы входа (плоский файл, электронная почта и/или база данных). Это довольно настраиваемо и имеет довольно хороший интерфейс для обновления Вашего web.config для конфигурации входа. Обычно я называю свой вход от На Ошибке в Global.asax.
BigInteger.probablePrime (bitLength, random)
возвращает (вероятное) простое число указанной длины в битах. Это означает максимальное значение 2 ^ bitlength - 1 и минимум 2 ^ (bitlength - 1). Как бы я ни ненавидел это как ответ, это, вероятно, ваш лучший выбор, если вы не хотите начать углубляться в теорию чисел.
Что вам нужно сделать, так это выяснить длины битов, которые требует ваш диапазон, а затем передать их в probablePrime ()
, пока вы не вернете простое число в правильном диапазоне.
Ответ 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 он есть.
В качестве упражнения для читателя,