Алгоритм Кунерта — это алгоритм для вычисления модульного квадратного корня заданного числа. [1] [2]
Алгоритм не требует факторизации модуля и опирается на модульные операции, что часто легко, когда заданное число является простым.
Алгоритм
Чтобы найти y по заданному значению
для этого необходимо выполнить следующие шаги:
- найти модульный квадратный корень из . Этот шаг довольно прост, независимо от того, насколько велико N, когда является простым числом.
- решить квадратное уравнение, связанное с модульным квадратным корнем из . Большинство примеров Кунерта в его оригинальной статье решают это уравнение, делая C целым квадратом и, таким образом, приравнивая z к нулю.
- Разверните следующее уравнение, чтобы получить квадратное уравнение
- Всегда можно убедиться, что квадратное уравнение может быть решено, отрегулировав модуль N в приведенном выше уравнении. Таким образом
- обеспечит квадратичный .
- Затем можно настроить F , чтобы убедиться, что это квадрат. Для больших модулей, таких как , можно быстро вычислить их квадратные корни с помощью этого метода.
- Параметры полиномиального разложения достаточно гибкие, например, это можно сделать. Довольно легко выбрать X и Y так, чтобы был квадрат. Модульный квадратный корень из можно взять таким образом.
- Решив соответствующее квадратное уравнение, мы теперь имеем переменные w и положим v = r (если C в квадратном уравнении является натуральным квадратом).
- Решите относительно переменных следующее уравнение:
- Получите значение X путем факторизации следующего многочлена:
- получение ответа типа
- Получите модульный квадратный корень с помощью уравнения. Не забудьте установить X таким образом, чтобы член выше был равен нулю. Таким образом, X будет 37/9 или -1/25.
Пример
Чтобы получить сначала получите .
Затем разложим многочлен:
в
Поскольку в этом случае член C является квадратом, то берем и вычисляем (в общем случае ).
- Решите для и следующее уравнение
- получение решения и . (Могут быть и другие пары решений этого уравнения.)
- Затем разложим на множители следующий многочлен:
- получение
- Затем получите модульный квадратный корень через
- Убедитесь, что
В случае отсутствия ответа можно использовать then.
Смотрите также
Ссылки
- ^ Адольф Кунерт, "Sitzungsberichte. Academie Der Wissenschaften", том 78 (2), 1878, стр. 327-338 (для алгоритма квадратного уравнения), стр. 338–346 (для модульного квадратичного алгоритма), доступно в Библиотеке Эрнеста Майра, Гарвардский университет url="https://pdfhost.io/v/~OwxzpPNA_KUNERTH_1878" получено="09.09.2024"
- ↑ Леонард Юджин Диксон, «История чисел», т. 2, стр. 382–384.
- Адольф Кунерт, "Sitzungsberichte. Academie Der Wissenschaften", том 75, II, 1877, стр. 7–58.
- Адольф Кунерт, "Sitzungsberichte. Academie Der Wissenschaften", том 82, II, 1880, стр. 342–375.