Алгоритм Тонелли – Шэнкса
Тонелли -Шенкса Алгоритм (называемый Шэнксом алгоритмом RESSOL) используется в модульной арифметике для решения r в конгруэнции формы r 2 ≡ n (mod p ), где p — простое число : то есть найти квадратный корень из n по модулю p .
Тонелли-Шэнкса нельзя использовать для составных модулей: нахождение квадратных корней по модулю составных чисел является вычислительной проблемой, эквивалентной целочисленной факторизации . [ 1 ]
Эквивалентная, но несколько более избыточная версия этого алгоритма была разработана Альберто Тонелли [ 2 ] [ 3 ] в 1891 году. Обсуждаемая здесь версия была независимо разработана Дэниелом Шэнксом в 1973 году, который объяснил:
Мое опоздание с изучением этих исторических ссылок было связано с тем, что я одолжил первый том « Диксона» Истории другу, и он так и не был возвращен. [ 4 ]
По словам Диксона, [ 3 ] Алгоритм Тонелли может извлекать квадратные корни из x по модулю простых степеней p. л кроме простых чисел.
Основные идеи
[ редактировать ]Учитывая ненулевое значение и простое (который всегда будет нечетным), критерий Эйлера говорит нам, что имеет квадратный корень (т. является квадратичным вычетом ) тогда и только тогда, когда:
- .
Напротив, если число не имеет квадратного корня (является невычетом), критерий Эйлера говорит нам, что:
- .
найти такой не сложно , поскольку половина целых чисел от 1 до иметь это свойство. Итак, мы предполагаем, что у нас есть доступ к такому неостатку.
Путем (обычного) многократного деления на 2 мы можем написать как , где странно. Обратите внимание: если мы попробуем
- ,
затем . Если , затем является квадратным корнем из . В противном случае для , у нас есть и удовлетворительно:
- ; и
- это корень -й степени из 1 (поскольку ).
Если при наличии выбора и для конкретного удовлетворяющие вышеизложенному (где не является квадратным корнем из ), мы можем легко вычислить другое и для такие, что выполняются приведенные выше соотношения, то мы можем повторять это до тех пор, пока становится корень -й степени из 1, т.е. . В этот момент является квадратным корнем из .
Мы можем проверить, является ли это корень -й степени из 1, возведя его в квадрат раз и проверяем, равен ли он 1. Если да, то ничего делать не нужно, так как тот же выбор и работает. Но если это не так, должно быть -1 (поскольку при возведении в квадрат получается 1, а из 1 могут быть только два квадратных корня 1 и -1 по модулю ).
Чтобы найти новую пару и , мы можем умножить по фактору , предстоит определить. Затем необходимо умножить на коэффициент держать . Итак, когда равно -1, нам нужно найти коэффициент так что это -й корень из 1 или эквивалентно это корень -й степени из -1.
Хитрость здесь в том, чтобы использовать , известный неостаток. Критерий Эйлера применяется к показано выше говорит, что это корень -й степени из -1. Итак, возведя в квадрат неоднократно, у нас есть доступ к последовательности корень -й степени из -1. Мы можем выбрать тот, который будет служить в качестве . После небольшого обслуживания переменных и тривиального сжатия регистров приведенный ниже алгоритм возникает естественным образом.
Алгоритм
[ редактировать ]Операции и сравнения над элементами мультипликативной группы целых чисел по модулю p неявно являются mod p .
Входы :
- п , простое число
- n , элемент такие, что решения сравнения r 2 = n существует; в этом случае мы говорим, что n — квадратичный вычет по модулю p .
Выходы :
- захожу такой, что р 2 = п
Алгоритм :
- Вынося степени двойки, найдите Q и S такие, что с Q нечетным
- Найдите букву Z в который является квадратичным невычетом
- Половина элементов набора будут квадратичными невычетами.
- Кандидатов можно проверить с помощью критерия Эйлера или путем нахождения символа Якоби.
- Позволять
- Петля:
- Если t = 0, верните r = 0
- Если t = 1, верните r = R
- В противном случае используйте повторное возведение в квадрат, чтобы найти наименьшее i , 0 < i < M , такое, что
- Позволять , и установите
После того, как вы решили сравнение с r, второе решение будет . По крайней мере, я такой, что есть M , то решения сравнения не существует, т. е. n не является квадратичным вычетом.
Это наиболее полезно, когда p ≡ 1 (mod 4).
Для таких простых чисел, что p ≡ 3 (mod 4), эта проблема имеет возможные решения. . Если они удовлетворяют , это единственные решения. Если не, , n — квадратичный невычет, решений нет.
Доказательство
[ редактировать ]Мы можем показать, что в начале каждой итерации цикла выполняются следующие инварианты цикла :
Изначально:
- (поскольку z является квадратичным невычетом по критерию Эйлера)
- (поскольку n — квадратичный вычет)
На каждой итерации с M' , c' , t' , R' новые значения заменяют M , c , t , R :
-
- поскольку у нас это есть но ( i — наименьшее значение такое, что )
От и проверку на t = 1 в начале цикла, мы видим, что мы всегда найдем i в 0 < i < M такое, что . M строго меньше на каждой итерации, поэтому алгоритм гарантированно остановится. Когда мы достигаем условия t = 1 и останавливаемся, последний инвариант цикла подразумевает, что R 2 = п .
Порядок т
[ редактировать ]Мы можем альтернативно выразить инварианты цикла, используя порядок элементов:
- как и раньше
Каждый шаг алгоритма перемещает t в меньшую подгруппу, измеряя точный порядок t и умножая его на элемент того же порядка.
Пример
[ редактировать ]Решение сравнения r 2 ≡ 5 (по модулю 41). 41 является простым, как и требовалось, и 41 ≡ 1 (по модулю 4). 5 является квадратичным вычетом по критерию Эйлера: (как и раньше, операции в неявно являются mod 41).
- так ,
- Найдите значение z:
- , поэтому 2 является квадратичным вычетом по критерию Эйлера.
- , поэтому 3 — квадратичный невычет: установите
- Набор
- Петля:
- Первая итерация:
- , так что мы еще не закончили
- , так
- Вторая итерация:
- , так что мы еще не закончили
- так
- Третья итерация:
- , и мы закончили; возвращаться
- Первая итерация:
Действительно, 28 2 ≡ 5 (по модулю 41) и (−28) 2 ≡ 13 2 ≡ 5 (по модулю 41). Таким образом, алгоритм дает два решения нашего сравнения.
Скорость алгоритма
[ редактировать ]Алгоритм Тонелли – Шэнкса требует (в среднем по всем возможным входным данным (квадратичные остатки и квадратичные невычеты))
модульные умножения, где количество цифр в двоичном представлении и количество единиц в двоичном представлении . Если искомый квадратичный невычет можно найти, проверив, является ли случайно выбранное число является квадратичным невычетом, для него требуется (в среднем) вычисления символа Лежандра . [ 5 ] Среднее значение двух вычислений символа Лежандра объясняется следующим образом: является квадратичным вычетом со случайностью , что меньше, чем но , поэтому нам в среднем нужно будет проверить, есть ли является квадратичным вычетом два раза.
По сути, это показывает, что алгоритм Тонелли – Шэнкса работает очень хорошо, если модуль является случайным, то есть если не особенно велик по отношению к количеству цифр в двоичном представлении . Как написано выше, алгоритм Чиполлы работает лучше, чем алгоритм Тонелли-Шэнкса, если (и только если) . Однако если вместо этого использовать алгоритм Сазерленда для выполнения вычисления дискретного логарифма в 2-силовской подгруппе , можно заменить с выражением, которое асимптотически ограничено . [ 6 ] Явно вычисляется такой, что а потом удовлетворяет (Обратите внимание, что кратно 2, потому что является квадратичным вычетом).
Алгоритм требует от нас найти квадратичный невычет . Не существует известного детерминированного алгоритма, работающего за полиномиальное время для поиска такого значения. . Однако если обобщенная гипотеза Римана верна, существует квадратичный невычет , [ 7 ] что дает возможность проверить каждый до этого предела и найти подходящее за полиномиальное время . Однако имейте в виду, что это наихудший сценарий; в общем, как указано выше, обнаруживается в среднем в двух исследованиях.
Использование
[ редактировать ]Алгоритм Тонелли-Шэнкса можно (естественно) использовать для любого процесса, в котором необходимы квадратные корни по простому модулю. Например, его можно использовать для поиска точек на эллиптических кривых . Это также полезно для вычислений в криптосистеме Рабина и на этапе просеивания квадратичного сита .
Обобщения
[ редактировать ]Тонелли – Шэнкса можно обобщить на любую циклическую группу (вместо ) и к корням k -й степени для произвольного целого числа k , в частности к извлечению корня k- й степени из элемента конечного поля . [ 8 ]
Если в одной и той же циклической группе необходимо получить много квадратных корней и S не слишком велико, можно заранее подготовить таблицу квадратных корней из элементов 2-степенного порядка, а алгоритм упростить и ускорить следующим образом.
- Вынесите степени 2 из p - 1, определив Q и S как: с Q нечетным.
- Позволять
- Находить из таблицы так, что и установить
- вернуть Р.
Алгоритм Тонелли будет работать с mod p^k.
[ редактировать ]Согласно «Теории чисел» Диксона. [ 3 ]
В справочнике Диксона показана следующая формула для квадратного корня из .
- когда , или (s должно быть 2 для этого уравнения) и такой, что
- для затем
- где
- для затем
отмечая, что и отмечая, что затем
Возьмем другой пример: и
Диксон также приписывает Тонелли следующее уравнение:
- где и ;
С использованием и используя модуль математика следующая:
Сначала найдите модульный мод квадратного корня что можно сделать с помощью обычного алгоритма Тонелли:
- и таким образом
И применяя уравнение Тонелли (см. выше):
Справка Диксона [ 3 ] ясно показывает, что алгоритм Тонелли работает с модулями .
Примечания
[ редактировать ]- ^ Одед Голдрейх, Вычислительная сложность: концептуальная перспектива , Cambridge University Press, 2008, стр. 588.
- ^ Фолькер Дикерт; Манфред Куфляйтнер; Герхард Розенбергер; Ульрих Хертрампф (24 мая 2016 г.). Дискретные алгебраические методы: арифметика, криптография, автоматы и группы . Де Грютер. стр. 163–165. ISBN 978-3-11-041632-9 .
- ^ Jump up to: а б с д и Леонард Юджин Диксон (1919). История теории чисел . Том. 1. Вашингтон, Вашингтонский институт Карнеги. стр. 215–216 .
- ^ Дэниел Шэнкс. Пять теоретико-числовых алгоритмов. Материалы второй Манитобской конференции по вычислительной математике. Стр. 51–70. 1973.
- ^ Гонсало Торнария - Модуль квадратных корней p, страница 2 https://doi.org/10.1007%2F3-540-45995-2_38
- ^ Сазерленд, Эндрю В. (2011), «Вычисление структур и дискретные логарифмы в конечных абелевых p-группах», Mathematics of Computation , 80 (273): 477–500, arXiv : 0809.3413 , doi : 10.1090/s0025-5718-10- 02356-2 , S2CID 13940949
- ^ Бах, Эрик (1990), «Явные границы проверки простоты и связанных с ней проблем», Mathematics of Computation , 55 (191): 355–380, doi : 10.2307/2008811 , JSTOR 2008811
- ^ Адлеман, Л.М., К. Мандерс и Г. Миллер: 1977, «О получении корней в конечных полях». В: 18-й симпозиум IEEE по основам информатики. стр. 175-177
- ^ "Национальная академия Линчеи, Рим. Рендиконти, (5), 1, 1892, 116-120".
Ссылки
[ редактировать ]- Иван Нивен; Герберт С. Цукерман; Хью Л. Монтгомери (1991). Введение в теорию чисел (5-е изд.). Уайли. стр. 110–115 . ISBN 0-471-62546-9 .
- Дэниел Шэнкс. Пять теоретико-числовых алгоритмов. Материалы второй Манитобской конференции по вычислительной математике. Стр. 51–70. 1973.
- Альберто Тонелли, Замечания о разрешении квадратичных сравнений. Новости Королевского общества наук и Гёттингенского университета имени Георга Августа. стр. 344–346. 1891. [1]
- Гаган Тара Нанда - Математика 115: Алгоритм RESSOL [2]
- Гонсало Торнария [3]