23-06-2023
Тест Миллера — Рабина — вероятностный полиномиальный тест простоты. Тест Миллера — Рабина позволяет эффективно определять, является ли данное число составным. Однако, с его помощью нельзя строго доказать простоту числа. Тем не менее тест Миллера — Рабина часто используется в криптографии для получения больших случайных простых чисел.
Алгоритм был разработан Гари Миллером в 1976 году и модифицирован Майклом Рабином в 1980 году.
Содержание |
Пусть — нечётное число большее 1. Число однозначно представляется в виде , где нечётно. Целое число , , называется свидетелем простоты числа , если выполняется одно из условий:
или
Теорема Рабина утверждает, что составное нечётное число имеет не более различных свидетелей простоты, где — функция Эйлера.
Алгоритм Миллера — Рабина параметризуется количеством раундов r. Рекомендуется брать r порядка величины , где m — проверяемое число.
Для данного m находятся такие целое число s и целое нечётное число t, что . Выбирается случайное число a, 1 < a < m. Если a не является свидетелем простоты числа m, то выдается ответ «m составное», и алгоритм завершается. Иначе, выбирается новое случайное число a и процедура проверки повторяется. После нахождения r свидетелей простоты, выдается ответ «m, вероятно, простое», и алгоритм завершается.
Алгоритм может быть записан на псевдокоде следующим образом:
Ввод: m > 2, нечётное натуральное число, которое необходимо проверить на простоту; r — количество раундов. Вывод: составное, означает, что m является составным числом; вероятно простое, означает, что m с высокой вероятностью является простым числом. Представить m − 1 в виде 2s·t, где t нечётно, можно сделать последовательным делением m - 1 на 2. цикл А: повторить r раз: Выбрать случайное целое число a в отрезке [2, m − 2] x ← at mod m если x = 1 или x = m − 1, то перейти на следующую итерацию цикла А цикл B: повторить s − 1 раз x ← x2 mod m если x = 1, то вернуть составное если x = m − 1, то перейти на следующую итерацию цикла А вернуть составное вернуть вероятно простое
Из теоремы Рабина следует, что если r случайно выбранных чисел оказались свидетелями простоты числа m, то вероятность того, что m составное, не превосходит .
Изначальный алгоритм, предложенный Миллером, был детерминированным и состоял в проверке всех a от до . Алгоритм Миллера гарантированно распознает простые и составные числа при условии выполнения расширенной гипотезы Римана. Алгоритм Миллера — Рабина не зависит от справедливости гипотезы, но является вероятностным.
Если число a является свидетелем простоты составного нечетного числа m, то число m в свою очередь называется сильно псевдопростым по основанию a. Если число m является сильно псевдопростым по основанию a, то оно также является псевдопростым Ферма по основанию a.
Например, сильно псевдопростые числа по основанию 2 образуют последовательность:
а по основанию 3 — последовательность:
Тест Миллера — Рабина.