Русская Википедия:Тест простоты Люка

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

В теории чисел тест простоты Люка — это тест простоты натурального числа n; для его работы необходимо знать разложение <math>n-1</math> на множители. Для простого числа n простые множители числа <math>n-1</math> вместе с некоторым основанием a составляют сертификат Пратта, который позволяет подтвердить за полиномиальное время, что число n является простым.

Описание

Пусть n > 1 — натуральное число. Если существует целое a такое, что <math>1<a<n</math> и

<math>a^{n-1} \equiv 1 \pmod n</math>

и для любого простого делителя q числа <math>n-1</math>

<math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n</math>

то n простое.

Если такого числа a не существует, то nсоставное число.

Доказательство

Если n простое, то группа вычетов <math>\mathbb{Z}_n</math> циклична, то есть имеет образующую <math>g</math>, порядок которой совпадает с порядком группы <math>|\mathbb{Z}_n^{\times}|=n-1</math>, а значит, для любого простого делителя <math>q</math> числа <math>n-1</math> выполняется сравнение:

<math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n.</math>

Если n — составное, то либо <math>\text{НОД}(a,n)>1</math> и тогда <math>a^{n-1} \not\equiv 1 \pmod n</math>, либо <math>a^{n-1} \equiv 1 \pmod n</math>. Если предположить, что для этого a ещё и выполняется <math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n</math>, то, поскольку <math>\frac{n-1}{q} \mid n-1</math>, получаем, что группа <math>\mathbb{Z}_n^{\times}</math> имеет элемент порядка <math>n-1</math>, значит <math>|\mathbb{Z}_n^{\times}|</math> делит <math>n-1</math>, что противоречит тому, что <math>|\mathbb{Z}_n^{\times}| =\varphi (n)<n-1</math> при составных n.

По закону контрапозиции получаем критерий Люка.

Пример

Например, возьмем n = 71. Тогда <math>n-1=70 = 2 \cdot 5 \cdot 7</math>. Выберем случайно <math>a=17</math>. Вычисляем:

<math>17^{70} \equiv 1 \pmod {71}.</math>

Проверим сравнения <math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n</math> для <math>q=2;5;7</math>:

<math>17^{35} \equiv 70 \not\equiv 1 \pmod {71}</math>
<math>17^{14} \equiv 25 \not\equiv 1 \pmod {71}</math>
<math>17^{10} \equiv 1 \equiv 1 \pmod {71}.</math>

К сожалению <math>17^{10} \equiv 1 \equiv 1 \pmod {71}.</math>. Поэтому мы пока не можем утверждать, что 71 простое.

Попробуем другое случайное число a, выберем <math>a=11</math>. Вычисляем:

<math>11^{70} \equiv 1 \pmod {71}.</math>

Снова проверим сравнения <math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n</math> для <math>q=2;5;7</math>:

<math>11^{35} \equiv 70 \not\equiv 1 \pmod {71}</math>
<math>11^{14} \equiv 54 \not\equiv 1 \pmod {71}</math>
<math>11^{10} \equiv 32 \not\equiv 1 \pmod {71}.</math>

Таким образом, 71 простое.

Заметим, что для быстрого вычисления степеней по модулю используется алгоритм двоичного возведения в степень со взятием остатка по модулю n после каждого умножения.

Заметим также, что при простом n из обобщенной гипотезы Римана вытекает, что среди первых <math>O(\ln ^2 n)</math> чисел есть хотя бы одна образующая группы <math>\mathbb{Z}_n</math>, поэтому условно можно утверждать, что подобрать основание a можно за полиномиальное время.

Алгоритм

Алгоритм, написанный псевдокодом, следующий:

Ввод: n > 2 - нечетное число, тестируемое на простоту; k - параметр, определяющий точность теста
Вывод: простое, если n простое, в противном случае составное либо возможно составное;
Определяем все простые делители <math>n-1</math>.
Цикл1: Выбираем случайно a из интервала [2, n − 1]
      Если <math>a^{n-1} \not\equiv 1 \pmod n</math> вернуть составное
      Иначе 
         Цикл2: Для всех простых <math>q \mid n-1</math>:
            Если <math>a^{\frac{n-1}{q}} \not\equiv 1 \pmod n</math>
               Если мы не проверили сравнение для всех <math>q</math>
                  то продолжаем выполнять Цикл2
               иначе вернуть простое
            Иначе возвращаемся к Циклу1
Вернуть возможно составное.

См. также

Литература

  • Василенко О. Н. Теоретико-числовые алгоритмы в криптографии, МЦНМО, 2003
  • Трост Э. — Primzahlen / Простые числа — М.: ГИФМЛ, 1959, 135 с

Шаблон:Rq Шаблон:Теоретико-числовые алгоритмы