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