public static BigInt GeneratePrime(int bit_length, int confidence, Random rnd)
{
if ((bit_length < 2) || (confidence < 1))
throw new ArgumentOutOfRangeException();
BigInt n = THREE;
while (n.BitLength < bit_length)
{
BigInt s = n;
while (true)
{
BigInt max_value = FOUR * s + TWO;
int num_bits = max_value.BitLength - 1;
BigInt r;
do
{
r = new BigInt(num_bits, rnd);//генерируется случайное число длиной не более num_bits
}
while ((r <= ONE) || (r > max_value) || (r % TWO != ZERO));
n = s * r + ONE;
if (n.IsProbablePrime(confidence, rnd))//проверка на простоту с помощью алгоритма Рабина-Миллера
break;
}
}
return n;
}
Помогите разобраться в алгоритме генерации простых чилел.
Есть класс C# для работы с большими целыми числами. В нем имеются метод для генерации больших простых чисел. Помогите разобраться в алгоритме его работы.