stringtranslate.com

Алгоритм Кунерта

Алгоритм Кунерта — это алгоритм для вычисления модульного квадратного корня заданного числа. [1] [2] Алгоритм не требует факторизации модуля и опирается на модульные операции, что часто легко, когда заданное число является простым.

Алгоритм

Чтобы найти y по заданному значению

для этого необходимо выполнить следующие шаги:

  1. найти модульный квадратный корень из . Этот шаг довольно прост, независимо от того, насколько велико N, когда является простым числом.
  2. решить квадратное уравнение, связанное с модульным квадратным корнем из . Большинство примеров Кунерта в его оригинальной статье решают это уравнение, делая C целым квадратом и, таким образом, приравнивая z к нулю.
    Разверните следующее уравнение, чтобы получить квадратное уравнение
    Всегда можно убедиться, что квадратное уравнение может быть решено, отрегулировав модуль N в приведенном выше уравнении. Таким образом
    обеспечит квадратичный .
    Затем можно настроить F , чтобы убедиться, что это квадрат. Для больших модулей, таких как , можно быстро вычислить их квадратные корни с помощью этого метода.
    Параметры полиномиального разложения достаточно гибкие, например, это можно сделать. Довольно легко выбрать X и Y так, чтобы был квадрат. Модульный квадратный корень из можно взять таким образом.
  3. Решив соответствующее квадратное уравнение, мы теперь имеем переменные w и положим v = r (если C в квадратном уравнении является натуральным квадратом).
  4. Решите относительно переменных следующее уравнение:
  5. Получите значение X путем факторизации следующего многочлена:
    получение ответа типа
  6. Получите модульный квадратный корень с помощью уравнения. Не забудьте установить X таким образом, чтобы член выше был равен нулю. Таким образом, X будет 37/9 или -1/25.

Пример

Чтобы получить сначала получите .

Затем разложим многочлен:

в

Поскольку в этом случае член C является квадратом, то берем и вычисляем (в общем случае ).

Решите для и следующее уравнение
получение решения и . (Могут быть и другие пары решений этого уравнения.)
Затем разложим на множители следующий многочлен:
получение
Затем получите модульный квадратный корень через
Убедитесь, что

В случае отсутствия ответа можно использовать then.

Смотрите также

Ссылки

  1. ^ Адольф Кунерт, "Sitzungsberichte. Academie Der Wissenschaften", том 78 (2), 1878, стр. 327-338 (для алгоритма квадратного уравнения), стр. 338–346 (для модульного квадратичного алгоритма), доступно в Библиотеке Эрнеста Майра, Гарвардский университет url="https://pdfhost.io/v/~OwxzpPNA_KUNERTH_1878" получено="09.09.2024"
  2. Леонард Юджин Диксон, «История чисел», т. 2, стр. 382–384.