WikiDer > Алгоритм Тонелли – Шанкса

Tonelli–Shanks algorithm

В Тонелли-Шанкс алгоритм (называемый Шанксом алгоритмом RESSOL) используется в модульная арифметика решить для р в конгруэнтности формы р2п (мод п), куда п это основной: то есть найти квадратный корень из п по модулю п.

Тонелли – Шанкс нельзя использовать для составных модулей: поиск квадратных корней по модулю составных чисел является вычислительной проблемой, эквивалентной целочисленная факторизация.[1]

Эквивалентная, но немного более избыточная версия этого алгоритма была разработанаАльберто Тонелли[2][3]в 1891 году. Обсуждаемая здесь версия была разработана независимо Дэниел Шэнкс в 1973 году, который объяснил:

Мое опоздание с изучением этих исторических ссылок было вызвано тем, что я одолжил первый том Диксона История другу, и его так и не вернули.[4]

По словам Диксона,[3] Алгоритм Тонелли может извлекать квадратные корни из Икс по модулю простых степеней пλ кроме простых чисел.

Основные идеи

Учитывая ненулевое значение и нечетное простое число , Критерий Эйлера говорит нам, что имеет квадратный корень (т. е. это квадратичный вычет) если и только если:

.

Напротив, если число не имеет квадратного корня (не является вычетом), критерий Эйлера говорит нам, что:

.

Найти такие , потому что половина целых чисел от 1 до есть это свойство. Итак, мы предполагаем, что у нас есть доступ к такому невычету.

Делясь (обычно) на 2 несколько раз, мы можем написать в качестве , куда странно. Обратите внимание, что если мы попробуем

,

тогда . Если , тогда квадратный корень из . В противном случае для , у нас есть и удовлетворение:

  • ; и
  • это -й корень из 1 (потому что ).

Если при выборе и для конкретного удовлетворяющий вышеуказанному (где не является квадратным корнем из ), легко вычислить другой и за так, чтобы выполнялись указанные выше соотношения, то мы можем повторять это, пока становится корень -й степени из 1, т.е. . В таком случае квадратный корень из .

Мы можем проверить, есть ли это -Корень 1-й степени из 1, возведя его в квадрат раз и проверяем, равно ли 1. Если да, то ничего делать не надо, тот же выбор и работает. Но если это не так, должно быть -1 (потому что возведение в квадрат дает 1, и может быть только два квадратных корня 1 и -1 из 1 по модулю ).

Чтобы найти новую пару и , мы можем умножить фактором , быть определенным. потом необходимо умножить на коэффициент хранить . Итак, нам нужно найти фактор так что это корень -й степени из 1 или эквивалентно это корень -й степени из -1.

Хитрость здесь в том, чтобы использовать , известный без остатка. Критерий Эйлера, примененный к показанный выше говорит, что это корень -й степени из -1. Итак, возведя в квадрат неоднократно у нас есть доступ к последовательности корень -й степени из -1. Мы можем выбрать подходящий, чтобы служить . Приведенный ниже алгоритм возникает естественным образом с небольшим обслуживанием переменных и упрощенным сжатием регистров.

Алгоритм

Операции и сравнения на элементах мультипликативная группа целых чисел по модулю p неявно модифицируются п.

Входы:

  • п, прайм
  • п, элемент такие, что решения сравнения р2 = п существовать; когда это так, мы говорим, что п это квадратичный вычет мод п.

Выходы:

  • р в такой, что р2 = п

Алгоритм:

  1. Вынося за скобки степени двойки, найдите Q и S такой, что с Q странный
  2. Искать z в который является квадратичным невычетом
  3. Позволять
  4. Петля:
    • Если т = 0, возврат р = 0
    • Если т = 1, возврат р = р
    • В противном случае используйте повторное возведение в квадрат, чтобы найти наименьшее я, 0 < я < M, так что
    • Позволять , и установите

После того, как вы решите сравнение с р второе решение . Если хотя бы я такой, что является M, то решения сравнения не существует, т.е. п не является квадратичным вычетом.

Это наиболее полезно, когда п ≡ 1 (мод.4).

Для таких простых чисел, что п ≡ 3 (mod 4), эта проблема имеет возможные решения . Если они удовлетворяют , это единственные решения. Если не, , п является квадратичным невычетом и решений не существует.

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

Мы можем показать, что в начале каждой итерации цикла следующие инварианты цикла держать:

Первоначально:

  • (поскольку z является квадратичным невычетом по критерию Эйлера)
  • (поскольку п квадратичный вычет)

На каждой итерации с M ' , c ' , т ' , Р' новые значения заменяют M, c, т, р:

    • поскольку у нас есть это но (я наименьшее значение такое, что )

Из и тест против т = 1 в начале цикла, мы видим, что всегда найдем я в 0 < я < M такой, что . M строго меньше на каждой итерации, и поэтому алгоритм гарантированно останавливается. Когда мы попадаем в условие т = 1 и halt, из последнего инварианта цикла следует, что р2 = п.

Порядок т

Мы можем альтернативно выразить инварианты цикла, используя порядок элементов:

  • как прежде

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

Пример

Решение сравнения р2 ≡ 5 (мод 41). 41 является простым числом, как требуется, и 41 ≡ 1 (mod 4). 5 - квадратичный вычет по критерию Эйлера: (как и раньше, операции в неявно являются mod 41).

  1. так ,
  2. Найдите значение для z:
    • , поэтому 2 - квадратичный вычет по критерию Эйлера.
    • , поэтому 3 - квадратичный невычет: set
  3. Набор
  4. Петля:
    • Первая итерация:
      • , так что мы еще не закончили
      • , так
    • Вторая итерация:
      • , так что мы еще не закончили
      • так
    • Третья итерация:
      • , и мы закончили; возвращаться

Действительно, 282 ≡ 5 (мод 41) и (−28)2 ≡ 132 ≡ 5 (мод 41). Таким образом, алгоритм дает два решения нашего сравнения.

Скорость алгоритма

Алгоритм Тонелли – Шанкса требует (в среднем по всем возможным входным данным (квадратичным вычетам и квадратичным невычетам))

модульные умножения, где количество цифр в двоичном представлении и - количество единиц в двоичном представлении . Если искомый квадратичный невычет можно найти, проверив, является ли случайно выбранный номер является квадратичным невычетом, требует (в среднем) вычисления символа Лежандра.[5] Среднее значение двух вычислений символа Лежандра объясняется следующим образом: квадратичный вычет со случайностью , что меньше, чем но , поэтому в среднем нам нужно будет проверить, является двукратным квадратичным вычетом.

По сути, это показывает, что алгоритм Тонелли – Шанкса работает очень хорошо, если модуль является случайным, то есть если не особенно велика по отношению к количеству цифр в двоичном представлении . Как написано выше, Алгоритм Чиполлы работает лучше, чем Тонелли – Шанкс, если (и только если) Однако, если вместо этого использовать алгоритм Сазерленда для вычисления дискретного логарифма в 2-силовской подгруппе , можно заменить с выражением, которое асимптотически ограничено .[6] Явно вычисляется такой, что а потом удовлетворяет (Обратите внимание, что делится на 2, потому что является квадратичным вычетом).

Алгоритм требует от нас найти квадратичный невычет . Не существует известного детерминированного алгоритма, который работал бы за полиномиальное время для поиска такого . Однако если обобщенная гипотеза Римана верно, существует квадратичный невычет ,[7] позволяя проверить каждый до этого предела и найти подходящий в полиномиальное время. Однако имейте в виду, что это наихудший сценарий; в целом, обнаруживается в среднем в 2 испытаниях, как указано выше.

Использует

Алгоритм Тонелли – Шанкса может (естественно) использоваться для любого процесса, в котором необходимы квадратные корни по модулю простого числа. Например, его можно использовать для поиска точек на эллиптические кривые. Это также полезно для вычислений в Криптосистема Рабина.

Обобщения

Тонелли – Шанкса можно обобщить на любую циклическую группу (вместо ) и к kкорни th для произвольного целого числа k, в частности, принимая kй корень элемента конечное поле.[8]

Если в одной и той же циклической группе должно быть получено много квадратных корней, а S не слишком велик, таблица квадратных корней из элементов 2-го порядка может быть подготовлена ​​заранее, а алгоритм упростится и ускорится следующим образом.

  1. Выносим за скобки степени 2 из п - 1, определяющий Q и S в качестве: с Q странный.
  2. Позволять
  3. Находить из таблицы так, что и установить
  4. возвращаться р.

Алгоритм Тонелли будет работать по модулю p ^ k

Согласно «Теории чисел» Диксона[3]

А. Тонелли[9] дал явную формулу для корней [3]

В справочнике Диксона приведена следующая формула квадратного корня из .

когда , или же (s должно быть 2 для этого уравнения) и такой, что
за тогда
куда

Отмечая, что и отмечая, что тогда

Другой пример: и

Диксон также приписывает Тонелли следующее уравнение:

куда и ;

С помощью и используя модуль математика следующая:

Сначала найдите модульный модуль квадратного корня что можно сделать с помощью обычного алгоритма Тонелли:

и поэтому

И применив уравнение Тонелли (см. Выше):

Ссылка Диксона[3] ясно показывает, что алгоритм Тонелли работает по модулям .

Примечания

  1. ^ Одед Гольдрайх, Вычислительная сложность: концептуальная перспектива, Cambridge University Press, 2008 г., стр. 588.
  2. ^ Фолькер Дикерт; Манфред Куфлейтнер; Герхард Розенбергер; Ульрих Хертрампф (24 мая 2016 г.). Дискретные алгебраические методы: арифметика, криптография, автоматы и группы. Де Грюйтер. С. 163–165. ISBN 978-3-11-041632-9.
  3. ^ а б c d е Леонард Юджин Диксон (1919). История теории чисел. 1. стр.215–216.
  4. ^ Дэниел Шэнкс. Пять теоретико-числовых алгоритмов. Труды Второй конференции Манитобы по вычислительной математике. Стр. 51–70. 1973 г.
  5. ^ Гонсало Торнария - Квадратные корни по модулю p, страница 2 https://doi.org/10.1007%2F3-540-45995-2_38
  6. ^ Сазерленд, Эндрю В. (2011), "Вычисление структуры и дискретные логарифмы в конечных абелевых p-группах", Математика вычислений, 80: 477–500, arXiv:0809.3413, Дои:10.1090 / s0025-5718-10-02356-2
  7. ^ Бах, Эрик (1990), "Явные оценки для проверки простоты и связанных проблем", Математика вычислений, 55 (191): 355–380, Дои:10.2307/2008811, JSTOR 2008811
  8. ^ Адлеман, Л. М., К. Мандерс и Г. Миллер: 1977, "Об укоренении в конечных полях". В: 18-й симпозиум IEEE по основам информатики. С. 175-177.
  9. ^ "Accademia nazionale dei Lincei, Rome. Rendiconti, (5), 1, 1892, 116-120".

Рекомендации

  • Иван Нивен; Герберт С. Цукерман; Хью Л. Монтгомери (1991). Введение в теорию чисел (5-е изд.). Вайли. стр.110–115. ISBN 0-471-62546-9.
  • Дэниел Шэнкс. Теоретико-пятизначные алгоритмы. Труды Второй конференции Манитобы по вычислительной математике. Стр. 51–70. 1973 г.
  • Альберто Тонелли, Bemerkung über die Auflösung quadratischer Congruenzen. Nachrichten von der Königlichen Gesellschaft der Wissenschaften und der Georg-Augusts-Universität zu Göttingen. Стр. 344–346. 1891 г. [1]
  • Гаган Тара Нанда - Математика 115: Алгоритм RESSOL [2]
  • Гонсало Торнария [3]