Опубликован: 19.01.2010 | Уровень: специалист | Доступ: платный
Лекция 12:

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

Тест Миллера-Рабина

Тест Миллера-Рабина определения простого числа есть комбинация тестов Ферма и квадратного корня. Он элегантным способом находит сильное псевдопростое число (простое число с очень высокой вероятностью). В этом тесте мы записываем n–1 как произведение нечетного числа m и степени числа 2.


n – 1 = m \times  2^{k}

В тесте Ферма при основании a можно записать так, как это показано ниже.

Идея теста на простоту числа на основе Ферма

a^{n-1}=a^{m\times2k}=[a^m]^2^k=[a^m]^2

Другими словами, вместо того чтобы вычислять an-1 (mod n) в один шаг, мы можем сделать это в k + 1 шагов. Какое преимущество в таком применении? Преимущество заключается именно в том, что испытание квадратным корнем может быть выполнено на каждом шаге. Если квадратный корень показывает сомнительные результаты, мы останавливаемся и объявляем n составным номером. На каждом шаге мы обеспечиваем, что тест Ферма и испытание квадратным корнем удовлетворено на всех парах смежных шагов, если оно удовлетворительно (если результат равен 1).

Инициализация

Выберите основу и вычислите T = am, в который m = (n – 1) / 2k.

a. Если T равно +1 или –1, объявляют, что n — сильное псевдопростое число, и процесс останавливается. Мы говорим, что n прошел два испытания: тест Ферма и испытание квадратным корнем. Почему? Потому что если T равно  \pm {\text{1}}, то T станет 1 на следующем шаге и остается 1 до прохождения теста Ферма. Кроме того, T прошел испытание тестом квадратного корня, потому что T был бы равен 1 на следующем шаге и квадратный корень был бы равен 1 (на следующем шаге) и равен  \pm {\text{1}} (на этом шаге).

b. Если T равен другому значению, мы не уверены, является ли n простым числом или составным объектом, значит, процесс будет продолжаться на следующем шаге.

Шаг 1

Возводим T в квадрат.

a. Если результат равен +1, мы определенно знаем, что тест Ферма пройден, потому что T остается 1 для последующих испытаний. Испытание квадратным корнем, однако, не прошло. Поскольку T равно 1 на этом шаге и имело на предыдущем шаге другое значение, чем  \pm {\text{1}} (причина, почему мы не остановились на предыдущем шаге), n объявляют составным объектом, и процесс останавливается.

b. Если результат равен (–1), мы знаем, что n в конечном счете пройдет тест Ферма. Мы знаем, что он пройдет испытание квадратным корнем, потому что T равно (–1) в этом шаге и станет 1 на следующем шаге. Мы объявляем n сильным псевдослучайным простым числом и останавливаем процесс.

c. Если T имеет еще какое-либо значение, мы не уверены, имеем ли мы дело с простым числом, и процесс продолжается на следующем шаге.

Шаги 2 до k–1

Этот шаг и все остальные шаги до k–1 такие же, как и шаг 1.

Этот шаг не является необходимым. Если мы достигли его и не приняли решение, он не поможет нам. Если результат этого шага (–1), значит, тест Ферма пройден, но поскольку результат предыдущего шага — не  \pm {\text{1}}, испытание квадратное корня не пройдено. После шага k – 1, если процесс не остановлен, мы объявляем, что n — составное.

Тест Миллера-Рабина требует от 0 до k–1.

Алгоритм 12.2 показывает псевдокод для теста Миллера-Рабина.

\tt\parindent0pt

Тест Миллера-Рабина (n, a)    \ \ \ \ \          // n —  число; a —  основание

\{ 

\ \ Find m and k such that $n–1 = m \times  2^{k}$

\ \ $T \gets  a^{m} \mod\ n$

\ \ if ( $T = \pm 1$) return "a prime"

\ \ for (I $\gets$  1 to k–1)     \ \ \ \ \\                   // k–1 — максимальное число шагов

\ \{ 

\ \ \ $T \gets  T^{2} \mod\ n$

\ \ \ if (T = +1) return "a composite"      \ \ \    // составное

\ \ \ if (T = –1) return "a prime"      \ \ \ \       // простое

\ \} 

return "a composite"
12.2. Псевдокод для теста Миллера-Рабина

Существует доказательство, что каждый раз, когда для числа проводится тест Миллера-Рабина, вероятность получить результат "не простое число" — 1/4. Если прошло m тестов (с m различными основаниями), вероятность, что тест выдаст не простое число — (1/4) m.

Пример 12.25

Проведите тест Миллера-Рабина к числу 561.

Решение

Используя основание 2, получим 561 - 1 = 35 \times 2^4, что означает, что m = 35, k = 4 и а = 2

\tt\parindent0pt

Инициализация:\	\ \ T = 2^{35} \mod\ 561 = 263 \mod\ 561

k = 1\ \ \ \ \ \           T = 263^{2} \mod\ 561 = 166 \mod\ 561

k = 2\ \ \ \ \ \ 	          T = 166^{2} \mod\ 561 = 67 \mod\ 561

k = 3\ \ \ \ \ \ 	          T = 67^{2} \mod\ 561 = +1 \mod\ 561 \to  \text{ составное}

Пример 12.26

Мы уже знаем, что 27 — не простое число. Попробуем применить тест Миллера-Рабина.

Решение

Основание равно 2, тогда 27-1 = 13 \times {2^1}, что означает m = 13, k = 1 и a = 2. В этом случае k – 1 = 0, и мы должны сделать только шаг инициализации:

T = 213 mod 27 = 11 mod 27. Однако поскольку алгоритм не делает ни одного цикла, вырабатывается решение "составной объект".

Пример 12.27

Мы знаем, что 61 — простое число; давайте посмотрим, что даст тест Миллера-Рабина

Решение

Мы используем основание 2.

\tt\parindent0pt

$61 – 1 = 15 \times  2^{2} \to  m = 15  k  = 2  a = 2 $

Инициализация:\ \ \            T = 2^{15} \mod\ 61 = 11 \mod\ 61

\ к = 1\ \ \ \ \ \                     T = 11^{2} \mod\ 61 = –1 \mod\ 61 \to  \text{простое число}

Обратите внимание, что последний результат — это 60 mod 61, но мы знаем, что 60 = –1 mod 61.

Рекомендованные тесты простоты чисел

Сегодня один из самых популярных тестов простоты чисел — комбинация теории делимости и тест Миллера-Рабина. При этом рекомендуются следующее шаги:

  1. Выбрать нечетное целое число, потому что все четные целые числа (кроме 2) — явно составные объекты.
  2. Сделать некоторые тривиальные испытания теории делимости на некоторых известных простых числах, таких как 3, 5, 7, 11, 13: так, чтобы убедиться, что вы не имеете дело с очевидным составным объектом. Если они не являются делителями при всех этих испытаниях, сделайте следующий шаг. Если выбранное число не прошло хотя бы один из этих тестов, вернитесь на один шаг и выберите другое нечетное число.
  3. Выбрать набор оснований для теста. Большое множество оснований предпочтительно.
  4. Сделать тест Миллера-Рабина на каждом из оснований. Если любой из них не проходит, вернитесь на один шаг и выберите другой нечетный номер. Если тесты прошли для всех оснований, объявите это число как сильное псевдопростое число.

Пример 12.28

Номер 4033составной объект (37 \times 109). Это подтверждает рекомендованное испытание простоты чисел?

Решение

1. Выполним проверку согласно теории делимости. Проверим сначала числа 2, 3, 5, 7, 11, 17 и 23 – не являются делителями числа 4033.

2. Выполним испытание Миллера-Рабина с основанием 2, тогда 4033-1 = 63 \times {2^6}, что означает m = 63 и k = 6.

\tt\parindent0pt

Инициализация: $T \equiv  2^{63} (mod\ 4033) \equiv  3521 (mod\ 4033)$

\ $k = 1$\ \ \ \ \  \ \ \                      $T \equiv  T^{2} = 3521^{2} (mod\ 4033) = –1 (mod\ 4033) \to  \text{Тест прошел}$

3. Но мы не удовлетворены. Мы продолжаем с другим основанием — 3.

\tt\parindent0pt

Инициализация: \ \    $T \equiv  3^{63}(mod\ 4033) \equiv  3551(mod\ 4033)$

$k = 1\ \ \ \ \ \              T \equiv  T^{2} \equiv  3551^{2} (mod\ 4033 \equiv  2443 (mod\ 4033)$

$k = 2\ \ \ \ \ \        T \equiv  T^{2} \equiv  2443^{2} (mod\ 4033 \equiv  3442 (mod\ 4033)$

$k = 3\ \ \ \ \ \        T \equiv  T^{2} \equiv  3442^{2} (mod\ 4033 \equiv   2443 (mod\ 4033) $

$k = 4\ \ \ \ \ \        T \equiv  T^{2} \equiv  2443^{2} (mod\ 4033 \equiv   3442 (mod\ 4033)$

$k = 5\ \ \ \ \ \        T \equiv  T^{2} \equiv  3442^{2} (mod\ 4033 \equiv   2443 (mod\ 4033)$ Не соответствует (составное)
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

Илья Сидоркин
Илья Сидоркин

Добрый день! Подскажите пожалуйста как и когда получить диплом, после сдичи и оплаты?????

Константин Леденев
Константин Леденев
Россия
Олег Равков
Олег Равков
Россия