Реферат: Быстрые вычисления с целыми числами и полиномами

Теперь рассмотрим, как находятся постоянные a в формуле Ньютона. Их можно определить, находя «разделённые разности» и сводя вычисления в следующую таблицу (иллюстрирующую случай n = 3):

y 0

(y 1y 0 )/(x 1x 0 ) = y ¢ 1

y 1 (y 2y’ 1 )/(x 2x 0 ) = y ¢¢ 2

(y 2y 1 )/(x 2x 1 ) = y ¢ 2 (y’’ 3y’’ 2 )/(x 3x 0 ) = y ¢¢¢ 3

y 2 (y 3y’ 2 )/(x 3x 1 ) = y ¢¢ 3

(y 3y 2 )/(x 3x 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 0h )(x x 0 ) +…+ b2 / 2! h 2 **(x x 0h )(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 ). Целое число а есть первообразный корень по модулю р , поэтому имеем (xuk )h º 0 (modp – 1) и

x ºuk (mod qk ).

К-во Просмотров: 420
Бесплатно скачать Реферат: Быстрые вычисления с целыми числами и полиномами