В вычислительной теории чисел тест Лукаса является тестом на простоту натурального числа n ; он требует, чтобы простые множители числа n − 1 были уже известны. [1] [2] Он является основой сертификата Пратта , который дает краткую проверку того, что n является простым числом.
Пусть n — положительное целое число. Если существует целое число a , 1 < a < n , такое, что
и для каждого простого множителя q числа n − 1
тогда n — простое число. Если такого числа a не существует, то n — это либо 1, либо 2, либо составное число .
Причина корректности этого утверждения заключается в следующем: если первая эквивалентность верна для a , мы можем вывести, что a и n взаимно просты . Если a также переживает второй шаг, то порядок a в группе ( Z / n Z ) * равен n −1, что означает, что порядок этой группы равен n −1 (потому что порядок каждого элемента группы делит порядок группы), подразумевая, что n является простым числом . И наоборот, если n является простым числом, то существует примитивный корень по модулю n , или генератор группы ( Z / n Z )*. Такой генератор имеет порядок |( Z / n Z )*| = n −1, и обе эквивалентности будут верны для любого такого примитивного корня.
Обратите внимание, что если существует a < n , такое, что первое равенство не выполняется, то a называется свидетелем Ферма составности n .
Например, возьмем n = 71. Тогда n − 1 = 70 и простые множители 70 — 2, 5 и 7. Мы случайным образом выбираем a=17 < n . Теперь мы вычисляем:
Для всех целых чисел a известно, что
Следовательно, мультипликативный порядок 17 (mod 71) не обязательно равен 70, поскольку выше может работать и некоторый множитель 70. Поэтому проверьте 70, деленное на его простые множители:
К сожалению, мы получаем, что 17 10 ≡ 1 (mod 71). Так что мы все еще не знаем, является ли 71 простым числом или нет.
Пробуем еще одно случайное число a , на этот раз выбирая a = 11. Теперь вычисляем:
Опять же, это не показывает, что мультипликативный порядок 11 (mod 71) равен 70, поскольку может подойти и некоторый множитель 70. Поэтому проверьте 70, деленное на его простые множители:
Таким образом, мультипликативный порядок числа 11 (mod 71) равен 70, и, следовательно, 71 является простым числом.
(Чтобы выполнить эти модульные возведения в степень , можно использовать быстрый алгоритм возведения в степень, такой как двоичное или цепочечное возведение в степень ).
Алгоритм можно записать на псевдокоде следующим образом:
Алгоритм lucas_primality_test имеет входные данные : n > 2, нечетное целое число, которое необходимо проверить на простоту. k , параметр, определяющий точность теста. Выходные данные : простое число , если n является простым числом, в противном случае составное число или возможно составное число . определите простые множители числа n −1. LOOP1: повторить k раз: выбрать a случайным образом в диапазоне [2, n − 1] если тогда вернуть составной else # LOOP2: для всех простых множителей q числа n −1: если тогда если мы проверили это равенство для всех простых множителей числа n −1 тогда вернуть простой else продолжить LOOP2 else # продолжить LOOP1 возврат возможно составной .