Реферат: Быстрые вычисления с целыми числами и полиномами
Теперь рассмотрим, как находятся постоянные a в формуле Ньютона. Их можно определить, находя «разделённые разности» и сводя вычисления в следующую таблицу (иллюстрирующую случай n = 3):
y 0
(y 1 – y 0 )/(x 1 – x 0 ) = y ¢ 1
y 1 (y 2 – y’ 1 )/(x 2 – x 0 ) = y ¢¢ 2
(y 2 – y 1 )/(x 2 – x 1 ) = y ¢ 2 (y’’ 3 – y’’ 2 )/(x 3 – x 0 ) = y ¢¢¢ 3
y 2 (y 3 – y’ 2 )/(x 3 – x 1 ) = y ¢¢ 3
(y 3 – y 2 )/(x 3 – x 2 ) = y ¢ 3
y 3 (7)
Можно доказать, что a0 = y 0 , a1 = y ’ 1 , a2 = y ’ 2 , и т. д. Следовательно, для нахождения величин может быть использована следующая вычислительная процедура (соответствующая таблице (7)):
Начать с того, что установить (a0 , a1 , …, an ) ¬ (y 0 , y 1 , … , yn ); затем для k = 1, 2, …, n (именно в таком порядке) установить yj ¬ (yj – yj – 1 )/(xj – xj – k )для j = n , n – 1, …, k (именно в таком порядке).
Если мы хотим вычислить многочлен u (x ) степени n сразу для многих значений x , образующих арифметическую прогрессию (т. е. хотим вычислить u (x 0 ), u (x 0 + h ), u (x 0 + 2h ),…), то весь процесс можно после нескольких первых шагов свести к одному только сложению вследствие того факта, что n -я разность от многочлена есть постоянная.
1 Найти коэффициенты bn , …, b1 , b0 представления нашего многочлена в виде интерполяционного многочлена Ньютона
u (x ) = bn / n ! hn (x – x 0 – (n – 1)h )…(x – x 0 – h )(x – x 0 ) +…+ b2 / 2! h 2 **(x – x 0 – h )(x – x 0 ) + b1 / h 2 (x – x 0 ) + b0 . (8)
(Это можно сделать, беря повторные разности, в точности так же, как мы определяли выше постоянные a в (5) (надо принять xj = x 0 + jh ), с тем исключением, что все деления на xj – xj – k из вычислительной процедуры устраняются.)
2 Установить x ¬x 0 .
3 Теперь значением u (x ) является b0 .
4 Установить bj ¬bj + bj + 1 для j = 0, 1, …, n – 1 (именно в таком порядке). Увеличить x на h и вернуться в шаг 3.
4. Дискретное логарифмирование
Пусть p – простое число. Ещё Эйлер знал, что мультипликативная группа кольца циклична, т. е. существуют такие целые числа а , что сравнение
ax ºb (mod p ) (2)
разрешимо относительно x при любом b ÎZ, не делящимся на p . Числа а с этим свойством называются первообразными корнями, и количество их равно j(p – 1), где j – функция Эйлера. Целое х , удовлетворяющее сравнению (2), называется индексом или дискретным логарифмом числа b .
Выше мы описали алгоритм, позволяющий по заданному числу x достаточно быстро вычислять ах modp . Обратная же операция – вычисление по заданному b его дискретного логарифма, вообще говоря, является очень сложной в вычислительном отношении задачей. Именно это свойство дискретного логарифма и используется в его многочисленных криптографических применениях. Наиболее быстрые (из известных) алгоритмы решения этой задачи, основанные на так называемом методе решета числового поля, требуют выполнения exp(c (lnp )1/3 (lnlnp )2/3 ) арифметических операций, где c – некоторая положительная постоянная. Это сравнимо со сложностью наиболее быстрых алгоритмов разложения чисел на множители. Конечно, указанная оценка сложности получена при условии справедливости ряда достаточно правдоподобных гипотез.
Говоря о сложности задачи дискретного логарифмирования, мы имели в виду «общий случай». Ведь и большое целое число легко может быть разложено на простые сомножители, если все эти сомножители не очень велики. Известен алгоритм, позволяющий быстро решать задачу дискретного логарифмирования, если p – 1 есть произведение малых простых чисел.
Пусть q – простое число, делящее р – 1. Обозначим с ºа ( p – 1)/ q (modp ), тогда классы вычетов 1, с , с 2 , … , с q – 1 все различны и образуют полное множество решений уравнения х q = 1 в поле Fp = Z/Zp . Если q не велико и целое число d удовлетворяет сравнению х q º 1 (modp ), то показатель k , 0 £k < q , для которого выполняется d ºck (modp ), легко может быть найден, например, с помощью перебора. Именно на этом свойстве основан упомянутый выше алгоритм.
Допустим, что р – 1 = qk h , (q ,h ) = 1. Алгоритм последовательно строит целые числа uj , j = 0,1,…,k , для которых выполняется сравнение
º 1 (modp ). (3)
Так как выполняется сравнение º 1 (modp ), то найдётся целое число u 0 , для которого º (modp ). При таком выборе сравнение (3) с j = 0, очевидно, выполняется. Предположим, что найдено число uj , удовлетворяющее сравнению (3). Тогда определим t с помощью сравнения
ºc t (mod p ), (4)
и положим. Имеют место сравнения
ºº 1 (modp ), (5)
означающие справедливость (3) при j + 1.
При j = k сравнение означает в силу (2), что º 1 (modp ). Целое число а есть первообразный корень по модулю р , поэтому имеем (x – uk )h º 0 (modp – 1) и
x ºuk (mod qk ).