Вперед: 13.7.5 Отсеивание составных чисел
Вверх: 13.7 Анализ алгоритма построения больших простых чисел, изложенного в Стандарте (ГОСТ Р 34.10-94) "Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма"
Назад: 13.7.3 Всегда ли результатом работы Алгоритма являются простые числа?
  Содержание
  Предметный указатель
Основное время в процессе работы Алгоритма уходит на поиск
простых чисел в прогрессии . Если Алгоритм наткнулся
на такое число, то проверка простоты его, в случае
справедливости условий теоремы 8, выполняется
сравнительно быстро. Поэтому важным качеством алгоритма
должна быть способность доказывать простоту каждого
простого числа, встречающегося в прогрессии.
Отметим, в этой связи, что не все простые числа
могут быть распознаны указанным алгоритмом. Другими
словами, перебирая последовательно четные числа , и
проверяя числа
на простоту, Алгоритм
может не распознать некоторые простые числа и,
увеличив значение , продолжать работу дальше. Это,
конечно, может приводить к увеличению времени работы
алгоритма. Укажем некоторые примеры чисел , не
идентифицируемых Алгоритмом как простые. Простыми являются
все числа из следующего списка:
1)
, ,
;
2)
, ,
;
3)
, ,
;
4)
, ,
;
5)
,
,
.
Во всех указанных случаях и имеют место сравнения
Значит, если одно из указанных чисел встретится в
Алгоритме как , а соответствующие значения
будут равны , то числа не будут приняты как
простые и Алгоритм продолжит работу.
Указанные примеры являются частными реализациями при
следующего общего утверждения.
Предложение 1.
Пусть -- простое число, причем простое и
. Если
, , и порядок
числа по модулю не превосходит , то
и, следовательно, простое число
не удовлетворяет условиям теоремы 8.
Исключить указанный пропуск простых чисел можно за счет
проверки в Алгоритме условий теоремы 8 не только
при , но и при других значениях основания .
Предложение 2.
Для каждого простого числа ,
,
, на промежутке
имеется не менее
чисел , для которых
выполнены условия теоремы 8.
Предложение 2 показывает, что, выбирая
случайным образом числа на промежутке
при простом , можно с вероятностью,
большей чем
, найти число , для которого
будут выполнены условия теоремы 8.
Удобнее, однако, выбирать числа последовательно:
. Увеличение продолжительности работы при этом
произойдет лишь для тех простых чисел , которые
пропускались Алгоритмом. Но и для них, если принять на веру,
что корни сравнения
распределены
равномерно на промежутке
,
необходимое для выполнимости теоремы 8 число
будет найдено, согласно предложению 2,
достаточно быстро.
Но как будет работать измененный алгоритм, если число
составное? Существуют составные числа (числа
Кармайкла) для которых условие (2) выполняется
при любом , , так же как и для простых чисел.
Эти числа встречаются достаточно редко. Тем не менее в
1993 г. доказано, что их бесконечно много. Известна
модификация теста теоремы 8,
основанная на следующей теореме:
Теорема 10 ([Rab], [Will]).
Пусть M -- нечетное составное число, ,
нечетно, и -- множество натуральных чисел ,
, для которых выполнены условия:
1)
,
2)
при всех ,
Тогда количество элементов в не меньше .
Если -- простое число, то для каждого , ,
согласно малой теореме Ферма имеем
т. е. для простого хотя бы одно из условий
теоремы 10 обязательно нарушается. В то же время, как
следует из теоремы 9, для составного числа
нарушение хотя бы одного из условий теоремы 9
происходит с вероятностью
при случайном выборе на интервале . При этом,
что легко видеть, выполняется сравнение (2).
Таким образом, если проверять для числа выполнимость
условий 1) и 2) для случайно выбранных значений ,
или, что технически удобнее, для
, то с
вероятностью, большей, чем , составное число
будет при этом опознано как составное.
Итак, изменим пункт 8 Алгоритма следующим образом:
8.1.
Положить
. Вычислить целое
и нечетное число такие, что (
.
8.2.
Положить
.
8.3.
Проверить условие
Если это условие нарушается, перейти в шаг 8.6.
8.4.
При каждом ,
,
проверить условие
Если оно нарушается хотя бы при одном , перейти в
шаг 8.6.
8.5.
Положить
и перейти в пункт 6.
8.6.
Проверить условие
|
(8) |
Если это условие не выполняется, перейти в пункт 8.2.
8.7.
Проверить условие
. Если это
условие не выполняется, перейти в пункт 8.2.
8.8.
Положить
.
Как уже было сказано, приведенное выше изменение пункта 8
Алгоритма позволит достаточно быстро доказывать как простоту
числа , если оно простое, так и непростоту, если оно
составное. При простом Алгоритм из пунктов 8.3 и 8.4
будет всегда переходить в пункт 8.6, и согласно
предложению 2 довольно быстро будет найдено
число , для которого выполнится условие (8).
Условие пункта 8.7 для простого числа , конечно же,
будет выполнено. Так что Алгоритм попадет в пункт 8.8, а
затем перейдет к построению простого числа . Если
же число составное и нарушается хотя бы одно из
условий пунктов 8.3 и 8.4, то согласно следствию из
теоремы 9 для не могут выполняться оба
условия пунктов 8.6 и 8.7. Но тогда Алгоритм перейдет в
пункт 8.2, будет вычислено новое значение , с которым
будут проверяться условия пунктов 8.3 и 8.4. Согласно
теореме 10 довольно быстро будет обнаружено число
, для которого будут выполнены условия пунктов 8.3 и 8.4.
Тогда число будет определено как составное и из
пункта 8.6 Алгоритм перейдет к построению нового числа
.
Вперед: 13.7.5 Отсеивание составных чисел
Вверх: 13.7 Анализ алгоритма построения больших простых чисел, изложенного в Стандарте (ГОСТ Р 34.10-94) "Процедуры выработки и проверки электронной цифровой подписи на базе асимметричного криптографического алгоритма"
Назад: 13.7.3 Всегда ли результатом работы Алгоритма являются простые числа?
  Содержание
  Предметный указатель
|