Тест Люка — Лемера
Те́ст Люка́ — Ле́мера (Шаблон:Lang-en, сокр. LLT) — полиномиальный, детерминированный и безусловный (то есть не зависящий от недоказанных гипотез) тест простоты для чисел Мерсенна. Сформулирован Эдуардом Люка в 1878 году и доказан Лемером в 1930 годуШаблон:Переход.
При заданном простом числе тест позволяет за полиномиальное времяШаблон:Переход от битовой длины числа Мерсенна определить, является простым или составнымШаблон:Переход. Доказательство справедливости теста существенно опирается на функции ЛюкаШаблон:Переход, что позволило обобщить тест Люка — Лемера на некоторые числа, вид которых отличен от чисел МерсеннаШаблон:Переход.
Благодаря этому тесту самыми большими известными простыми числами почти всегда были простые числа Мерсенна, причём даже до появления компьютеров. До 2018 года он был основным тестом простоты в рамках проекта распределённых вычислений GIMPS, занимающегося поиском новых простых чисел Мерсенна. Также он интересен своей связью с чётными совершенными числамиШаблон:Переход.
Формулировка
Тест основывается на следующем критерии простоты чисел Мерсенна[1]:
Для проверки простоты последовательность чисел вычисляется по модулю числа (то есть вычисляются не сами числа , длина которых растёт экспоненциально, а остатки от деления на , длина которых ограничена битами). Последнее число в этой последовательности называется вычетом Люка — Лемера[2]. Таким образом, число Мерсенна является простым тогда и только тогда, когда число — нечётное простое и вычет Люка — Лемера равен нулю. Сам алгоритм можно записать в виде псевдокода[3]:
LLT(p)
►Вход: простое нечётное число p
S = 4
k = 1
M = 2p − 1
До тех пока k != p - 1 выполнять
S = ((S × S) − 2) mod M
k += 1
Конец цикла
Если S = 0 выполнять
Возвратить ПРОСТОЕ
иначе
Возвратить СОСТАВНОЕ
Конец условия
Значения , для которых справедлив критерий простоты, образуют последовательность: [4][5][6].
Не обязательно проверять все простые нечётные при непосредственном переборе, поскольку некоторые числа Мерсенна специального вида всегда являются составными, что следует, например, из следующей доказанной Эйлером теоремы[7]:
Доказательство
Один из подходов к доказательству основан на использовании функций Люка:
где — корни квадратного уравнения
с дискриминантом причём и взаимно просты.
В частности, при доказательстве используются некоторые свойства этих функций, а именно[8]:
- 1.
- 2.
- 3.
- 4. Если , , и
- ,
- то
- 5. Если — простое, такое, что взаимно просто с , то делит нацело ,
- где , а — символ Лежандра.
Схема доказательства[8]:
Необходимость
Из свойства 4. по модулю при , , следует:
- ,
а по свойству 2.
- ,
поэтому
и
, поэтому если — простое, то и из последних двух свойств делит
Далее, из свойств 1. и 2.
- ,
но по свойству 3.
- ,
то есть делит , а значит и .
Достаточность
Если делит , то из доказательства необходимости следует, что оно делит и . взаимно просто с по свойству 1., а по свойству 2. — делит . Но тогда каждый простой делитель числа представим в виде , то есть — простое.
История
Критерий простоты был предложен французским математиком Люка в 1878 году. В частности, Люка показал, что алгоритм позволяет проверять простоту для простых [8]. В 1930 году американский математик Лемер полностью доказал справедливость критерия для всех простых нечётных в своей диссертации на соискание учёной степени доктора философии[1].
В 1952 году Робинсон при поддержке Лемера провел вычисления на компьютере SWAC с использованием теста Люка — Лемера, результатом которого стало открытие простых чисел и . Позднее в этом же году были открыты , и [9].
Лёгкость реализации теста и рост вычислительных мощностей компьютеров позволили фактически любому человеку заниматься поиском простых чисел Мерсенна. Так, в 1978 году два американских старшеклассника Лора Никель и Курт Нолл (Лемер преподавал им теорию чисел) за 3 года работы доказали простоту числа , используя суперкомпьютер CDC Cyber 176 в Калифорнийском университете[10].
Наибольшее из известных простых чисел Мерсенна на 2024 год, найденное с помощью теста Люка — Лемера, это [11]. Однако это не самое большое известное простое число Мерсенна. 11 октября 2024 года с помощью теста Ферма было найдено . Поскольку тест Ферма является вероятностным, 12 октября был использован тест Люка — Лемера для проверки простоты; этот день является официальной датой открытия нового простого числа[12].
Примеры
Требование нечётности в условии критерия существенно, так как — простое, но .
Число — простое[13]. Действительно,
Применение теста к числу показывает, что оно составное[13]:
Действительно, .
Вычислительная сложность
В рассматриваемом тесте две основные операции: возведение в квадрат и деление по модулю. Эффективный алгоритм деления по модулю числа Мерсенна на компьютере (фактически сводящийся к нескольким операциям битового сдвига) дает следующая теорема[3]:
Например, чтобы вычислить остаток от деления числа на , нужно исходное число преобразовать в двоичный вид: , и, согласно теореме, разбивать на две части каждый раз, когда оно превосходит :
При использовании этого способа деления по модулю вычислительная сложность теста будет определяться сложностью алгоритма возведения в квадрат. Длина составляет бит, а алгоритм умножения двух чисел, например, «в столбик», имеет сложность [3]. Так как возведение в квадрат в тесте происходит раз, то вычислительная сложность алгоритма равна [14]. Тест можно ускорить, если использовать алгоритмы быстрого умножения больших целых чисел, например, метод умножения Шёнхаге — Штрассена. Сложность теста в таком случае составит .
Вариации и обобщения
Условие в тесте можно ослабить[7] и потребовать лишь, чтобы , откуда немедленно следует:
- .
В 1930 году Лемер вывел критерий простоты для чисел вида , где , а в 1969 году Шаблон:Не переведено 5 модифицировал тест Люка — Лемера для чисел такого вида, который впоследствии был дополнен Стечкиным[8]. Возможно обобщение теста и на числа вида [15].
Шаблон:Не переведено 5 были доказаны критерии простоты, аналогичные тесту Люка — Лемера, для чисел вида и , а также для некоторых чисел вида , где — простое [8].
Существует более общий -тест простоты, который применим для любого натурального числа , если известно полное или частичное разложение на простые множители числа или [3].
Применения
Во многом благодаря тесту Люка — Лемера, простые числа Мерсенна удерживают лидерство как самые большие известные простые числа, хотя и до существования теста числа Мерсенна почти всегда были наибольшими простыми. Так, в 1588 году была доказана простота чисел и [16].
Евклид доказал, что всякое число вида — совершенное, если — простое, а Эйлер показал, что все чётные совершенные числа имеют такой вид[17]; поэтому тест Люка — Лемера фактически позволяет найти все чётные совершенные числа.
До 2018 года[18] этот тест использовался в качестве основого в проекте распределённых вычислений GIMPS, занимающегося поиском новых простых чисел Мерсенна[19], хотя до сих пор не доказано, что их бесконечно много[20].
Также данный тест используется для тестирования аппаратного обеспечения. Так, в 1992 году специалисты компании Шаблон:Нп5 протестировали новый суперкомпьютер компании Cray, используя программу, написанную Шаблон:Нп5 для поиска простых чисел Мерсенна. В результате за 19 часов работы программы было открыто простое число [21].
Примечания
Шаблон:^ Шаблон:Внешние ссылки Шаблон:Теоретико-числовые алгоритмы
- ↑ 1,0 1,1 Шаблон:Source
- ↑ Шаблон:Книга
- ↑ 3,0 3,1 3,2 3,3 Шаблон:Книга
- ↑ Шаблон:Source
- ↑ Шаблон:Source
- ↑ Шаблон:Sloane
- ↑ 7,0 7,1 Шаблон:Книга
- ↑ 8,0 8,1 8,2 8,3 8,4 Шаблон:Статья
- ↑ Шаблон:Source
- ↑ Шаблон:Source
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ 13,0 13,1 Шаблон:Книга
- ↑ Шаблон:Книга
- ↑ Шаблон:Source
- ↑ Шаблон:Source
- ↑ Шаблон:Книга
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Source
- ↑ Шаблон:Source