В математике тест Люка-Лемера ( LLT ) — это тест на простоту чисел Мерсенна . Тест был первоначально разработан Эдуардом Люка в 1878 году [1] и впоследствии доказан Дерриком Генри Лемером в 1930 году.
Тест Лукаса–Лемера работает следующим образом. Пусть M p = 2 p − 1 — число Мерсенна для проверки, где p — нечетное простое число . Простоту числа p можно эффективно проверить с помощью простого алгоритма, например, пробного деления , поскольку p экспоненциально меньше M p . Определим последовательность для всех i ≥ 0 следующим образом:
Первые несколько членов этой последовательности — 4, 14, 194, 37634, ... (последовательность A003010 в OEIS ). Тогда M p является простым тогда и только тогда, когда
Число s p − 2 mod M p называется остатком Лукаса–Лемера p . (Некоторые авторы эквивалентно устанавливают s 1 = 4 и проверяют s p −1 mod M p ). В псевдокоде проверка может быть записана как
// Определить, является ли M p = 2 p − 1 простым числом для p > 2 Лукас–Лемер (p) var s = 4 var M = 2 p − 1 повторить p − 2 раза: с = ((с × с) − 2) mod M если s == 0 вернуть ПРОСТОЙ , иначе вернуть СОСТАВНОЙ
Выполнение mod M
на каждой итерации гарантирует, что все промежуточные результаты будут иметь размер не более p бит (в противном случае количество бит будет удваиваться на каждой итерации). Та же стратегия используется при модульном возведении в степень .
Возможны начальные значения s 0 , отличные от 4, например, 10, 52 и другие (последовательность A018844 в OEIS ). [2] Вычет Люка-Лемера, вычисленный с этими альтернативными начальными значениями, все равно будет равен нулю, если M p является простым числом Мерсенна. Однако члены последовательности будут другими, и ненулевой вычет Люка-Лемера для не простого числа M p будет иметь другое числовое значение, чем ненулевое значение, вычисленное при s 0 = 4.
Также можно использовать начальное значение (2 mod M p )(3 mod M p ) −1 , обычно обозначаемое для краткости как 2/3. [2] Это начальное значение равно (2 p + 1) /3, числу Вагстаффа с показателем p .
Начальные значения, такие как 4, 10 и 2/3, являются универсальными, то есть они действительны для всех (или почти всех) p . Существует бесконечно много дополнительных универсальных начальных значений. [2] Однако некоторые другие начальные значения действительны только для подмножества всех возможных p , например, s 0 = 3 можно использовать, если p = 3 (mod 4). [3] Это начальное значение часто использовалось там, где это было уместно в эпоху ручных вычислений, в том числе Лукасом при доказательстве простого числа M 127. [4] Первые несколько членов последовательности — это 3, 7, 47, ... (последовательность A001566 в OEIS ).
Если s p −2 = 0 mod M p , то предпоследний член равен s p −3 = ± 2 ( p +1)/2 mod M p . Знак этого предпоследнего члена называется символом Лемера ϵ( s 0 , p ).
В 2000 году С. Ю. Гебре-Эгзиабхер доказал, что для начального значения 2/3 и при p ≠ 5 знак имеет вид:
То есть, ϵ(2/3, p ) = +1, если p = 1 (mod 4) и p ≠ 5. [2]
Тот же автор также доказал гипотезу Вольтмана [ 5] о том, что символы Лемера для начальных значений 4 и 10, когда p не равно 2 или 5, связаны соотношением:
То есть, ϵ(4, p ) × ϵ(10, p ) = 1, если p = 5 или 7 (mod 8) и p ≠ 2, 5. [2]
Последовательность OEIS A123271 показывает ϵ(4, p ) для каждого простого числа Мерсенна M p .
В алгоритме, как написано выше, есть две дорогие операции во время каждой итерации: умножение s × s
и mod M
операция. mod M
Операция может быть сделана особенно эффективной на стандартных бинарных компьютерах, наблюдая, что
Это говорит о том, что младшие n бит числа k плюс оставшиеся биты числа k эквивалентны k по модулю 2 n −1. Эту эквивалентность можно использовать многократно, пока не останется не более n бит. Таким образом, остаток после деления k на число Мерсенна 2 n −1 вычисляется без использования деления. Например,
Более того, поскольку s × s
никогда не превысит M 2 < 2 2p , этот простой метод сходится максимум за 1 p -битное сложение (и, возможно, перенос из p -го бита в 1-й бит), что может быть сделано за линейное время. Этот алгоритм имеет небольшой исключительный случай. Он даст 2 n −1 для кратного модулю, а не правильное значение 0. Однако этот случай легко обнаружить и исправить.
При отсутствии модуля асимптотическая сложность алгоритма зависит только от алгоритма умножения, используемого для возведения в квадрат s на каждом шаге. Простой алгоритм умножения «начальной школы» требует O ( p 2 ) операций на уровне бит или слов для возведения в квадрат p -битного числа. Поскольку это происходит O( p ) раз, общая временная сложность составляет O( p 3 ). Более эффективным алгоритмом умножения является алгоритм Шёнхаге–Штрассена , основанный на быстром преобразовании Фурье . Он требует всего O( p log p log log p ) времени для возведения в квадрат p -битного числа. Это снижает сложность до O( p 2 log p log log p ) или Õ( p 2 ). [6] Еще более эффективный алгоритм умножения, алгоритм Фюрера , требует времени только для умножения двух p -битных чисел.
Для сравнения, наиболее эффективный рандомизированный тест на простоту для общих целых чисел, тест на простоту Миллера–Рабина , требует O( k n 2 log n log log n ) [ противоречиво ] битовых операций с использованием умножения БПФ для n -значного числа, где k — число итераций, связанное с частотой ошибок. Для постоянного k это тот же класс сложности, что и тест Лукаса–Лемера. Однако на практике стоимость выполнения множества итераций и другие различия приводят к ухудшению производительности для Миллера–Рабина. [ необходимо разъяснение ] Наиболее эффективный детерминированный тест на простоту для любого n -значного числа, тест на простоту AKS , требует Õ(n 6 ) битовых операций в своем лучшем известном варианте и является чрезвычайно медленным даже для относительно небольших значений.
Число Мерсенна M 3 = 2 3 −1 = 7 является простым. Тест Лукаса–Лемера проверяет это следующим образом. Первоначально s устанавливается равным 4, а затем обновляется 3−2 = 1 раз:
Поскольку конечное значение s равно 0, вывод состоит в том, что M3 — простое число.
С другой стороны, M 11 = 2047 = 23 × 89 не является простым числом. Опять же, s устанавливается в 4, но теперь обновляется 11−2 = 9 раз:
Поскольку окончательное значение s не равно 0, вывод состоит в том, что M 11 = 2047 не является простым числом. Хотя M 11 = 2047 имеет нетривиальные множители, тест Лукаса–Лемера не дает никаких указаний на то, какими они могут быть.
Доказательство правильности этого теста, представленное здесь, проще, чем оригинальное доказательство, данное Лемером. Напомним определение
Цель состоит в том, чтобы показать, что M p является простым тогда и только тогда, когда
Последовательность представляет собой рекуррентное соотношение с замкнутым решением . Пусть и . Тогда по индукции следует, что для всех i :
и
Последний шаг использует эту замкнутую форму как в доказательстве достаточности, так и в доказательстве необходимости.
Цель состоит в том, чтобы показать, что влечет, что является простым числом. Далее следует простое доказательство, использующее элементарную теорию групп, данную Дж. В. Брюсом [7], как изложено Джейсоном Войцеховским. [8]
Предположим, что тогда
для некоторого целого числа k , поэтому
Умножение на дает
Таким образом,
Для противоречия предположим, что M p является составным, и пусть q будет наименьшим простым множителем M p . Числа Мерсенна нечетны, поэтому q > 2. Пусть будут целыми числами по модулю q , и пусть Умножение в определяется как
Очевидно, что это умножение замкнуто, т.е. произведение чисел из X само содержится в X. Размер X обозначается как
Так как q > 2, то и находятся в X. [примечание 2] Подмножество элементов в X с обратными элементами образует группу, которая обозначается X * и имеет размер Один элемент в X , не имеющий обратного элемента, равен 0, поэтому
Теперь и , так что
в X. Тогда по уравнению (1)
в X , и возведение обеих сторон в квадрат дает
Таким образом, лежит в X * и имеет обратный Кроме того, порядок делит Однако , поэтому порядок не делит Таким образом, порядок в точности равен
Порядок элемента не превышает порядка (размера) группы, поэтому
Но q — наименьший простой множитель составного числа , поэтому
Это приводит к противоречию . Следовательно, является простым.
В другом направлении цель состоит в том, чтобы показать, что простота влечет . Следующее упрощенное доказательство принадлежит Öystein J. Rödseth. [9]
Так как для нечетного , то из свойств символа Лежандра следует , что Это означает, что 3 является квадратичным невычетом по модулю По критерию Эйлера это эквивалентно
Напротив, 2 является квадратичным вычетом по модулю, так как и поэтому На этот раз критерий Эйлера дает
Объединение этих двух отношений эквивалентности дает
Пусть , и определим X как и прежде как кольцо Тогда в кольце X следует, что
где первое равенство использует биномиальную теорему в конечном поле , которая имеет вид
а второе равенство использует малую теорему Ферма , которая имеет вид
для любого целого числа a . Значение было выбрано таким образом, что Следовательно, это может быть использовано для вычисления в кольце X как
Остается только умножить обе части этого уравнения на и использовать , что дает
Так как это 0 в X , это также 0 по модулю
Тест Люка-Лемера является одним из основных тестов на простоту, используемых Great Internet Mersenne Prime Search (GIMPS) для поиска больших простых чисел. Этот поиск оказался успешным в поиске многих из самых больших простых чисел, известных на сегодняшний день. [10] Тест считается ценным, поскольку он может доказуемо проверить большой набор очень больших чисел на простоту в течение приемлемого периода времени. Напротив, эквивалентно быстрый тест Пепена для любого числа Ферма может быть использован только на гораздо меньшем наборе очень больших чисел, прежде чем будут достигнуты вычислительные пределы.
Использование БПФ ускоряет асимптотическое время теста Лукаса–Лемера для M
p
с O(
p
3
) до O(
p
2
log
p
log log
p
) битовых операций.