В
теории чисел
тест простоты Люка
— это
тест простоты
натурального числа
n
; для его работы необходимо знать разложение
на множители. Для простого числа
n
простые множители числа
вместе с некоторым основанием
a
составляют
сертификат Пратта
, который позволяет подтвердить за
полиномиальное время
, что число
n
является простым.
Описание
Пусть
n
> 1 — натуральное число. Если существует целое
a
такое, что
и
-
и для любого простого делителя
q
числа
-
то
n
простое.
Если такого числа
a
не существует, то
n
—
составное число
.
Доказательство
Если
n
простое, то группа вычетов
циклична, то есть имеет образующую
, порядок которой совпадает с порядком группы
, а значит, для любого простого делителя
числа
выполняется сравнение:
-
Если
n
— составное, то либо
и тогда
, либо
. Если предположить, что для этого
a
ещё и выполняется
, то, поскольку
, получаем, что группа
имеет элемент порядка
, значит
делит
, что противоречит тому, что
при составных
n
.
По
закону контрапозиции
получаем критерий Люка.
Пример
Например, возьмем
n
= 71. Тогда
. Выберем случайно
. Вычисляем:
-
Проверим сравнения
для
:
-
-
-
К сожалению
. Поэтому мы пока не можем утверждать, что 71 простое.
Попробуем другое случайное число
a
, выберем
. Вычисляем:
-
Снова проверим сравнения
для
:
-
-
-
Таким образом, 71 простое.
Заметим, что для быстрого вычисления степеней по модулю используется алгоритм двоичного возведения в степень со взятием остатка по модулю
n
после каждого умножения.
Заметим также, что при простом
n
из обобщенной
гипотезы Римана
вытекает, что среди первых
чисел есть хотя бы одна образующая группы
, поэтому условно можно утверждать, что подобрать основание
a
можно за полиномиальное время.
Алгоритм
Алгоритм, написанный
псевдокодом
, следующий:
Ввод: n > 2 - нечетное число, тестируемое на простоту; k - параметр, определяющий точность теста
Вывод: простое, если n простое, в противном случае составное либо возможно составное;
Определяем все простые делители .
Цикл1: Выбираем случайно a из интервала [2, n − 1]
Если вернуть составное
Иначе
Цикл2: Для всех простых :
Если
Если мы не проверили сравнение для всех
то продолжаем выполнять Цикл2
иначе вернуть простое
Иначе возвращаемся к Циклу1
Вернуть возможно составное.
См. также
Литература
-
Василенко О. Н. Теоретико-числовые алгоритмы в криптографии, МЦНМО, 2003
-
Трост Э. — Primzahlen / Простые числа — М.: ГИФМЛ, 1959, 135 с