For faster navigation, this Iframe is preloading the Wikiwand page for Алгоритм Тонелли — Шенкса.

Алгоритм Тонелли — Шенкса

Материал из Википедии — свободной энциклопедии

Алгори́тм Тоне́лли — Ше́нкса (названный Шенксом алгоритмом RESSOL) относится к модулярной арифметике и используется для решения сравнения

где  — квадратичный вычет по модулю , а  — нечётное простое число.

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

Эквивалентная, но немного более сложная версия этого алгоритма была разработана Альберто Тонелли в 1891 году. Версия алгоритма, обсуждаемая здесь, была разработана независимо Дэниелом Шенксом в 1973 году.

Входные данные:  — нечётное простое число,  — целое число, являющееся квадратичным вычетом по модулю , другими словами, , где  — символ Лежандра.

Результат работы алгоритма: вычет , удовлетворяющий сравнению .

  1. Выделим степени двойки из , то есть пусть , где нечётно, . Заметим, что если , то есть , тогда решение определяется формулой . Далее полагаем .
  2. Выберем произвольный квадратичный невычет , то есть символ Лежандра , положим .
  3. Пусть также
  4. Выполняем цикл:
    1. Если , то алгоритм возвращает .
    2. В противном случае в цикле находим наименьшее , , такое, что с помощью итерирования возведения в квадрат.
    3. Пусть , и положим , возвращаемся к началу цикла.

После нахождения решения сравнения второе решение сравнения находится как .

Решим сравнение .  — нечётно, и поскольку , 10 является квадратичным вычетом по критерию Эйлера.

  • Шаг 1: поэтому , .
  • Шаг 2: Возьмем  — квадратичный невычет (потому что (снова по критерию Эйлера)). Положим
  • Шаг 3:
  • Шаг 4: Начинаем цикл: , так что , проще говоря .
    • Пусть , тогда .
    • Положим , , и .
    • Перезапустим цикл, поскольку цикл завершен, мы получим

Поскольку , очевидно , отсюда получаем 2 решения сравнения.

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

[править | править код]

Пусть . Пусть теперь и , заметим, что . Последнее сравнение остается истинным после каждой итериации основного цикла алгоритма. Если в какой-то момент , то и алгоритм завершается с .

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

Сходным образом мы получим, что , поэтому порядок делит , значит порядок равен . Так как  — квадрат по модулю , то тоже квадрат, и значит, .

Положим, что и , и . Как и раньше, сохраняется; однако в этой конструкции как , так и имеют порядок . Отсюда следует, что имеет порядок , где .

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

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

[править | править код]

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

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

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

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

Применение

[править | править код]

Алгоритм Тонелли — Шенкса может быть использован для нахождения точек на эллиптической кривой над полем вычетов. Он также может быть использован для вычислений в криптосистеме Рабина.

Алгоритм Тонелли — Шенкса может быть обобщён на любую циклическую группу (вместо ) и на нахождение корней -й степени для произвольного натурального , в частности, на вычисление корней -й степени в конечном поле[5].

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

  1. Выделим степени двойки в : пусть такие, что , нечётно.
  2. Пусть .
  3. Найдём корень по таблице соотношений и положим
  4. Вернуть .

Примечания

[править | править код]
  1. Oded Goldreich, Computational complexity: a conceptual perspective, Cambridge University Press, 2008, p. 588.
  2. Gonzalo Tornaria, Square roots modulo p (недоступная ссылка), page 2.
  3. Sutherland, Andrew V. (2011), "Structure computation and discrete logarithms in finite abelian p-groups", Mathematics of Computation, 80: 477—500, doi:10.1090/s0025-5718-10-02356-2
  4. Bach, Eric (1990), "Explicit bounds for primality testing and related problems", Mathematics of Computation, 55 (191): 355—380, doi:10.2307/2008811, JSTOR 2008811
  5. L. M. Adleman, K. Manders, G. Miller: 1977, "On taking roots in finite fields". In: 18th IEEE Symposium on Foundations of Computer Science. p. 175–177.

Литература

[править | править код]
  • Нестеренко А. Ю. Теоретико-числовые методы в криптографии. — Москва. — 2012. — ISBN 978-5-94506-320-4.
  • Ишмухаметов Ш. Т. Методы факторизации натуральных чисел. — Казанский университет. — 2011.
  • Ivan Niven, Herbert S. Zuckerman, Hugh L. Montgomery. An Introduction to the Theory of Numbers. — 5th. — Wiley, 1991. — ISBN 0-471-62546-9.
  • Daniel Shanks. Five Number Theoretic Algorithms. Proceedings of the Second Manitoba Conference on Numerical Mathematics. P. 51–70. 1973.
  • Alberto Tonelli, Bemerkung uber die Auflosung quadratischer Congruenzen. Nachrichten von der Koniglichen Gesellschaft der Wissenschaften und der Georg-Augusts-Universitat zu Gottingen. P. 344—346. 1891.
  • Gagan Tara Nanda — Mathematics 115: The RESSOL Algorithm.


{{bottomLinkPreText}} {{bottomLinkText}}
Алгоритм Тонелли — Шенкса
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?