Научная статья на тему 'расширенном алгоритме Джебелеана–Вебера–Седжелмаси вычисления наибольшего общего делителя'

расширенном алгоритме Джебелеана–Вебера–Седжелмаси вычисления наибольшего общего делителя Текст научной статьи по специальности «Математика»

CC BY
463
48
i Надоели баннеры? Вы всегда можете отключить рекламу.
Журнал
Чебышевский сборник
Scopus
ВАК
RSCI
Область наук
Ключевые слова
НОД / алгоритм Евклида / бинарный алгоритм / к-арный алгоритм / алгоритм Шонхаге / алгоритм Вебера / алгоритм Лемера / GCD / Euclidean gcd / binary gcd / k-ary gcd / Sch¨onhage gcd / Weber gcd / Lehmer gcd

Аннотация научной статьи по математике, автор научной работы — Долгов Дмитрий Александрович

Существует большое количество различных алгоритмов вычисления Н.О.Д. Прежде всего стоит отметить алгоритмы типа Шонхаге. Они используются для очень больших чисел и имеют наилучшую асимптотическую сложность в худшем случае — 𝑂(𝑛 log2(𝑛) log(log(𝑛))). Для чисел поменьше используются обобщенный бинарные алгоритмы. Все они основаны на 𝑘-арной редукции: 𝛼 gcd(𝑢, 𝑣) = gcd(𝑣, |𝑎𝑢±𝑏𝑣| 𝑘 ), целые 𝑢 > 𝑣 > 0, gcd(𝑢, 𝑘) = gcd(𝑣, 𝑘) = 1, 𝛼 > 1. Знак + или − ставится в зависимости от версии выбранного алгоритма. Основная задача — подобрать коэффициенты 𝑎, 𝑏 таким образом, чтобы выполнялось 𝑎𝑢+𝑏𝑣 = 0 mod 𝑘. Число 𝑘 обычно выбирают равным простому числу или степени простого числа. Недостаток алгоритмов в том, что в ходе вычислений могут накапливаться дополнительные множители, поэтому в рекуррентном соотношении в начале стоит множитель 𝛼 > 1. Если 𝑘 = 2𝑠, то получаем обобщенные бинарные алгоритмы. Вебер первым предложил алгоритм поиска коэффициентов на основе подаваемых чисел, его обобщенный бинарный алгоритм работает в пять раз быстрее, чем бинарный алгоритм. Седжелмаси модифицировал алгоритм Джебелеана-Вебера, избавив его от дополнительных множителей, асимптотическая сложность алгоритма в худшем случае — 𝑂(𝑛2/ log(𝑛)). Коэффициенты Безу — представление Н.О.Д. 𝑑 чисел 𝐴,𝐵 в виде линейной комбинации 𝐴𝑥 + 𝐵𝑦 = 𝑑, где 𝑥 и 𝑦 — целые числа, называемые коэффициентами Безу. В этой статье предложен расширенный алгоритм Джебелеана–Вебера–Седжелмаси вычисления Н.О.Д двух натуральных чисел, выводятся необходимые формулы и приводятся примеры, показывающие как можно вычислять обратные элементы.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

An extended Jebelean^ WeberNSedjelmaci GCD algorithm

There are large number of different algorithms for gcd computation. First of all, it is the Shonhage type gcd algorithms. They are used for very large numbers and have the best asymptotic complexity in the worst case — 𝑂(𝑛 log2(𝑛) log(log(𝑛))). For lesser numbers, generalized binary algorithms are used. They are based on the 𝑘 -ary reduction: 𝛼 gcd(𝑢, 𝑣) = gcd(𝑣, |𝑎𝑢±𝑏𝑣| 𝑘 ), integers 𝑢 > 𝑣 > 0, gcd(𝑢, 𝑘) = gcd(𝑣, 𝑘) = 1, 𝛼 > 1. We use + or − depending on the type of gcd algorithm. The main task is to select the coefficients 𝑎, 𝑏 such that 𝑎𝑢 + 𝑏𝑣 = 0 mod 𝑘. The number 𝑘 is usually chosen as a prime number or a power of a prime number. Unfortunately, spirious factors can accumulate during the computation, so 𝛼 > 1. If 𝑘 = 2𝑠, then we obtain generalized binary algorithms. It’s five times faster than the binary gcd algorithm. Sedjelmaci modified the Jebelean-Weber’s algorithm, he removed spirious factors. Asymptotic complexity of the algorithm in the worst case is 𝑂(𝑛2/ log(𝑛)). Bezout Coefficients is a representation of gcd 𝑑 of the numbers 𝐴,𝐵 of a linear combination 𝐴𝑥 + 𝐵𝑦 = 𝑑, where 𝑥 and 𝑦 are integer numbers, called Bezout coefficients. In this paper we introduce the extended Jebelean–Weber–Sedjelmaci algorithm of two natural numbers, formulas and give examples that showing how to calculate inverse elements.

Текст научной работы на тему «расширенном алгоритме Джебелеана–Вебера–Седжелмаси вычисления наибольшего общего делителя»

ЧЕБЫШЕВСКИЙ СБОРНИК

Том 19. Выпуск 2

УДК 511.17 DOI 10.22405/2226-8383-2018-19-2-421-431

О расширенном алгоритме Джебелеана^Вебера^Седжелмаси вычисления наибольшего общего делителя

Долгов Дмитрий Александрович — аспирант кафедры системного анализа и информационных технологий, Казанский Федеральный Университет. e-mail: Dolgov.kfu@gmail.com

Аннотация

Существует большое количество различных алгоритмов вычисления Н.О.Д. Прежде всего стоит отметить алгоритмы типа Шонхаге. Они используются для очень больших чисел и имеют наилучшую асимптотическую сложность в худшем случае — 0(пlog2(n) log(log(n))). Для чисел поменьше используются обобщенный бинарные алгоритмы. Все они основаны на fc-арной редукции: a gcd(u,v) = gcd(w, |а"±Н), целые и > V > 0 gcd(w, к) = gcd(v, к) = 1, а ^ 1. Знак + или — ставится в зависимости от версии выбранного алгоритма. Основная задача — подобрать коэффициенты а, Ъ таким образом, чтобы выполнялось au + bv = 0 mod к. Число к обычно выбирают равным простому числу или степени простого числа. Недостаток алгоритмов в том, что в ходе вычислений могут накапливаться дополнительные множители, поэтому в рекуррентном соотношении в начале стоит множитель а ^ 1. Если к = 2s, то получаем обобщенные бинарные алгоритмы. Вебер первым предложил алгоритм поиска коэффициентов на основе подаваемых чисел, его обобщенный бинарный алгоритм работает в пять раз быстрее, чем бинарный алгоритм. Седжелмаси модифицировал алгоритм Джебелеана-Вебера, избавив его от дополнительных множителей, асимптотическая сложность алгоритма в худшем случае — 0(п2/ log(n)).

Коэффициенты Везу — представление Н.О.Д. d чисел А, В в виде линейной комбинации Ах + By = d, где х и у — целые числа, называемые коэффициентами Везу. В этой статье предложен расширенный алгоритм Джебелеана-Вебера-Седжелмаси вычисления Н.О.Д двух натуральных чисел, выводятся необходимые формулы и приводятся примеры, показывающие как можно вычислять обратные элементы.

Ключевые слова: НОД, алгоритм Евклида, бинарный алгоритм, к-арный алгоритм, алгоритм Шонхаге, алгоритм Вебера, алгоритм Лемера

Библиография: 19 названий. Для цитирования:

Д. А. Долгов. О расширенном алгоритме Джебелеана-Вебера-Седжелмаси вычисления наибольшего общего делителя // Чебышевский сб. 2018. Т. 19, вып. 2. С. 421-431.

CHEBYSHEVSKII SBORNIK Vol. 19. No. 2

UDC 511.17 DOI 10.22405/2226-8383-2018-19-2-421-431

An extended Jebelean^Weber^Sedjelmaci GCD algorithm

Dolgov Dmitry Alexandrovich — Postgraduate student of the Department of System analysis and Information Technologies, Kazan Federal University. e-mail: Dolgov.kfu@gmail.com

Abstract

There are large number of different algorithms for gcd computation. First of all, it is the Shonhage type gcd algorithms. They are used for very large numbers and have the best asymptotic complexity in the worst case — 0(nlog2(n) log(log(n))). For lesser numbers, generalized binary algorithms are used. They are based on the k -ary reduction: agcd(w, v) = gcd(v, |a"±to|), integers u > v > 0 gcd(u,k) = gcd(v,k) = 1, a > 1. We use + or — depending on the type of gcd algorithm. The main task is to select the coefficients a, b such that au + bv = 0 mod k. The number k is usually chosen as a prime number or a power of a prime number. Unfortunately, spirious factors can accumulate during the computation, so a > 1 If k = 2s, then we obtain generalized binary algorithms. It's five times faster than the binary gcd algorithm. Sedjelmaci modified the Jebelean-Weber's algorithm, he removed spirious factors. Asymptotic complexity of the algorithm in the worst case is 0(n2/log(n)).

Bezout Coefficients is a representation of gcd d of the numbers A, B of a linear combination Ax + By = d, where ^md y are integer numbers, called Bezout coefficients. In this paper we introduce the extended Jebelean-Weber-Sedjelmaci algorithm of two natural numbers, formulas and give examples that showing how to calculate inverse elements.

Keywords: GCD, Euclidean gcd, binary gcd, k-ary gcd, Schonhage gcd, Weber gcd, Lehmer gcd.

Bibliography: 19 titles. For citation:

D. A. Dolgov. 2018, "An extended Jebelean-Weber-Sedjelmaci GCD algorithm" , Chebyshevskii sbornik, vol. 19, no. 2. pp. 421-431.

1. Введение

Наибольшим общим делителем (Н.О.Д., gcd) двух натуральных чисел u,v отличных от О, называется наибольшее целое число d, такое что d\u и dlv. Все алгоритмы вычисления Н.О.Д следуют одной и той же идее сокращения и и v до и' и v', так что gcd(u', v') = gcd(w, v). Один из наиболее известных алгоритмов вычисления Н.О.Д. — алгоритм Евклида (АЕ), основанный на рекуррентном соотношении с использованием модульной редукции: gcd(u,v) = gcd(v,u mod v), где и > v > 0, которое выполняется до тех пор пока второй аргумент не станет равным 0. Тогда первый аргумент пары равен Н.О.Д. Асимптотическая временная сложность алгоритма в худшем случае составляет 0(п2) для двух п-битных чисел [3].

Расширенная версия АЕ (РАЕ) используется для нахождения вместе с Н.О.Д. d так называемых коэффициентов Безу которые являются коэффициентами линейной комбинации аи + bv = d. Работа расширенного алгоритма Евклида состоит из двух этапов. Первый этап совпадает со стандартным алгоритмом с накоплением целых чисел DIV = [-u/vj. На втором этапе коэффициенты Безу вычисляются по формулам (п — значение последней итерации):

ип = 0, vn = 1, щ = vi+i, Vi = щ+1 — vi+i • [A/B]i (1)

В 1967 Джозефом Стайном был получен бинарный алгоритм Н.О.Д., основанный на рекуррентном соотношении: gcd(u,v) = gcd(v, (и — v)/2), где u,v — нечетные и и > v > 0 [3,4]. Как и в АЕ, алгоритм выполяется пока второй аргумент на станет равен 0, в первом будет стоять Н.О.Д. Асимптотическая временная сложность алгоритма в худшем случае составляет 0(п2) для дв ух n-битных чисел. Преимуществом данного алгоритма перед АЕ является скорость работы: при одинаковой асимптотической временной сложности операция деления на произвольное нечетное число выполняется медленнее, чем операция деления на степень двойки, т.к. данную операцию можно заменить правым битовым сдвигом.

Алгоритм Лемера [1] — усовершенствованный алгоритм Евклида. Алгоритм работает со старшими разрядами больших чисел. Большая часть частных, полученных в ходе деления на каждом шаге, довольно мала. Например, Кнут заметил, что частные один, два и три составляют 67,7% всех частных [5]. Эти небольшие частные могут быть получены только из старших разрядов исходных чисел. Таким образом, алгоритм начинается с выделения старших разрядов и вычисления последовательности частных. Это позволяет выполнять большую часть вычислений с помощью арифметики однократной точности и существенно сэкономить на операциях многократной точности. Оценка сложности алгоритма Лемера была улучшена Соренсоном: п — количество бит чисел и и v, к — число старших бит, необходимых для подсчета частных, получаемых в ходе делений на каждом шаге алгоритма. Если к = |_log(n)/4_|, то сложность алгоритма в худшем случае составит 0(п2/log(n)) [6].

Одним из самых асимптотически быстрых алгоритмов вычисления Н.О.Д. является алгоритм Шонхаге [2], его асимптотическая временная сложность — 0(п log2(n) log(log(n))). Это классический рекурсивный алгоритм вычисления Н.О.Д., применяемый для очень больших чисел. На практике обнаруживается, что рекурсивные схемы Н.О.Д превосходят все известные альтернативы (например, различные бинарные алгоритмы), когда входные аргументы и, v достаточно велики, скажем, порядка десяков тысяч бит [3]. Классические алгоритмы на основе АЕ вычисляют частные qj и остатки rj на каждом шаге. В худшем случае сумма битовой длины последовательности {rj} пропорциональна п2. Таким образом, любой алгоритм, который явно вычисляет каждый член последовательности {rj}, имеет, по меньшей мере, квадратичную сложность [7]. С другой стороны, сумма битовых длин последовательности {qj}, которая связана с {rj}, пропорциональна п, т.к. большинство членов {qj} довольно малы. Поэтому члены rj лучше получать с помощью членов qj [3,7].

Стэле в 2004 получил бинарный рекурсивный алгоритм, имеющий такую же слож-

ность, как и алгоритм Шонхаге [8]. У нового алгоритма получается получается меньшая эффективная константа в "big-O". Основная идея нового алгоритма заключается в расширении рационального числа в цепную дробь, элементы которой берутся не из обычных натуральных чисел, а скорее из набора, построенного следующим образом: Wi/bi} = (± I, ± I, ± 4, ± 8, ± 3, ± 8, ± 7, ± 16, ± 16,...). При под счете gcd(u,v) необходимо выражать на каждом шаге щ = (at/bt) ■ v\ + г\: где ri — некоторый остаток. Далее рекурсивно вычисляется vi = (щ/bi) ■ Г\ + Г2 и так до тех пор, пока г к = 0- Для повышения эффективности алгоритма для небольших операндов используется обычно умножение, для больших операндов можно использовать алгоритм Карацубы или Тома-Кука, для очень больших операндов используется быстрое преобразование Фурье [3].

Но есть и другие более современные алгоритмы, работающие с числами произвольной длины. В 1990-х Соренсон получил обобщение бинарного алгоритма Н.О.Д., назвав его к-арным алгоритмом [9,10]. Сначала была описана версия с использованием "правого сдвига" (right-shift), потом с использованием левого сдвига (left-shift). Любой fc-арный алгоритм использует рекуррентное соотношение: a gcd(u, v) = gcd(v, ), целыe и > v > 0, gcd(u,k) = gcd(v, k) = 1, a ^ 1, знак + или — ставится в зависимости от версии выбранного алгоритма: с левым или правым сдвигом. Основная задача — подобрать коэффициенты a, b таким образом, чтобы выполнялось аи + bv = 0 mod к. Число к обычно выбирают как простое число или степень простого числа. Соренсон показал, что всегда можно найти а,Ь: 0 < |а|, |Ь| < у/к. Минус алгоритма в том, что в ходе вычислений могут накапливаться дополнительные множители, поэтому в рекуррентном соотношении в начале стоит а ^ 1. По сравнению с АЕ алгоритм Соренсона позволяет значительно уменьшить сложность вычислений с помощью выбора параметра к. Если u,v — два п битных числа, к — простое и к = 0(п2/ log3(n)), то сложность алгоритма 0(п2/ log(fc)) [10]. В дальнейшем были получены обобщенные бинарные алгоритмы с к = 2s [12,13]. Вебер первым предложил алгоритм поиска коэффициентов на основе подаваемых чисел, его обобщенный бинарный алгоритм работает

dmod

позволяет получить новое число необходимой битовой длины, содержащее Н.О.Д. В [11] были получено обобщение данной операции для многочленов над конечными полями. Седжелмаси модифицировал алгоритм Вебера, избавив его от дополнительных множителей [14].

Вычисление Н.О.Д. — распространенная операция, имеющая много приложений. Одно из таких приложений — задача факторизации натуральных чисел. В первую очередь, стоит отметить р алгоритм Полларда, р — 1 алгоритм Полларда, позволяющие эффективно фак-торизовать числа, в состав которых входят небольшие по размеру множители [3]. Еще стоит отметить субэкспоненциальный алгоритм факторизации Ленстры с использованием эллиптических кривых. Данный метод лучше всего подходит для нахождения небольших простых делителей числа до 83 бит (текущий рекорд принадлежит Р. Пропперу [15]). Сложность метода сильно зависит от размера наименьшего простого множителя факторизуемого п и только слабо от самого п. По этой причине, в последние годы было обнаружено много множителей поистине гигантских чисел. Многие из этих чисел лежат далеко за пределами возможностей алгоритмов квадратичного решета и общего метода решета числового поля [3,15]. Еще одно применение данной операции — вычисление псевдопростых и сильнопсевдопростых чисел [12].

Вычисление Н.О.Д. можно обобщить на многочлены. Данная операция применима для решения линейных диофантовых уравнений, следовательно, для решения линейных уравнений над кольцами вычетов. Например, для вычисления мультипликативного обратного для элементов поля классов вычетов по модулю некоторого неприводимого многочлена (для этого используются расширенные алгоритмы, например РАЕ); для разложения многочленов в произведение степеней многочленов. Также такие вычисления используются в задачах теории кодирования [18,19]. Одно из применений — декодирование кодов Рида-Соломона.

При декодировании необходимо решить ключевое уравнение S(z)a(z) = z2t&(z) — ш(г), или —to(z) = a(z)S(z)(modz2t), где a(z) - многочлен локаторов ошибок, a w(z) — многочлен значений ошибок. Декодирование с помощью расширенного алгоритма вычиления Н.О.Д. многочленов над GF(q) длины п является не только наиболее простым для понимания, но и по быстродействию оно по меньшей мере сравнимо с другими методами при п < 106 [16].

Впервые формулы для вычисления коэффициентов Безу (КБ) появились в [17]. Там рассматривалось два случая. В первом случае gcd( Ci, к) = 1 и C < Bi, где C = (xiAi + yiBi)/k. В этом случае новая пара (Aj+1,Bj+1) равнялась (Bi, (xiAi + yiBi)/k). Во втором случае gcd(Ci, к) = 1. Случай, где Ci ^ Bi и переложение формул для алгоритма Вебера (или его модификаций), не рассматривался. В алгоритме Джебелеана-Вебера-Серджелмаси не накапливаются дополнительные множители во время прямого хода, он обладает одной из лучших асимптотических сложностей среди остальных обобщенных бинарных алгоритмов. В данной статье автором вводится расширенный алгоритм Джебелеана-Вебера-Седжелмаси вычисления Н.О.Д двух натуральных чисел, выводятся необходимые формулы и приводятся примеры, показывающие как можно вычислять обратные элементы.

2. Алгоритм Джебелеана-Вебера-Седжелмаси

Ниже представлен алгоритм Седжелмаси выбора коэффициентов для обобщенного алгоритма Вебера-Джебелеана (JWA). Это модифицированная версия алгоритма Вебера [13]. В отличие от алгоритма Вебера здесь также возвращаем результат предыдущей итерации. Следующая теорема доказывает отсутствие дополнительных множителей, возникающих в ходе k

Теорема 1. (Седжелмаси) Пусть и ^ v ^ 1 м к ^ 1 — три целых, gcd(u,k) =

= gcd(f, к) = 1. Пусть М = \1 d1 ) — целочисленная матрица, полученная, из алгоритма

\п2 d2j

SJWA, u/v < /к. Если ^д1^ = ^П^ iUj/k)'™»* ^1,^2 _ целые, удовлетворяющие 0 ^Ri ^v, 0 < R2 < 2и//к и gcd(u, v) = gcd(Ei, R2).

словлен размером машинного слова. Также автор предложил использовать предвычисленные таблицы (precompute tables), хранящие всевозможные произведения, частные и остатки пар чисел ^ 2т, см. Лемма 3 [6] или Лемма 4.1 [10]. При выполнении вычислений с большими числами, необходимо разбить каждое из чисел на т двоичных блоков и выполнять всю арифметику поблочно, используя таблицы для вычисления произведений и частных чисел, ограниченных 2т. Функция такеосМ(и) приводит число к нечетному виду: пока и — нечетно, то и = и/2.

3. Расширенный алгоритм Джебелеана-Вебера-Седжелмаси

Сначала выведем для SJWA-GCD формулы, аналогичные (1). Пусть (Aj+1,Bj+1) — пара чисел, рассматриваемая на текущем шаге алгоритма и к = 2s, s > 0. Ai+1/Bi+1 < л/к, значит, запускаем SJWA-GCD.

3.1. Отсутствие дополнительных множителей

Рассмотрим случай, когда дополнительные множители не появляются в ходе работы алгоритма. Для каждой пары чисел можно записать соотношение Безу: ,v,i+1Ai+1 + Vi+1B+ = d.

Algorithm: SJWA-GCD

Input: 2 нечетных числа и ^ v ^ 3 Output: gcd(«, v)

fc = 23

к = 264

n = Llog2(«)J + 1

if n0'4 > k then m = |0.4log2(ra)J + 1 m = m + (m mod 2);fc = 2m; Precompute tables end

while uv = 0 do if u < v then

I (u, v) = (v, u) end

if u/v < y/k then

d^SJWA(u,v,k)

u = Idu — cvl/k\ v = \bu — avl/k else

| (u, v) = (v, u mod v) end

makeodd(u) ;makeodd(v) end

return u + v

Algorithm: SJWA

Input: x,y > 0 m ^ 4:

gcd(fc,x) = gcd(fc, у) = i

Output: 2 x 2 целочисленная

(ni di" матрица M = I ^

где 0 < П2, |^2| < Vk, П2 у = d2X (modfc) и raiу = dix (modfc)

r = x/y mod fc /i = (rai,di) = (fc, 0) /2 = («2 ,¿2) = (r, 1) while П2 ^ Vk do

fi = fi - Lrai /«2J/2

swap(fi, /2) end

^rai di\

V«2 d2 I

return M =

или

Ш, - т^ n lra2v—d2ulTrri lraiv—diul

каждом шаге идет подсчет двух к-арных редукции KKi = --fc-1, КЩ = J-fc-1 •

Ai+i = m&x(KRi,KR,2), B+i = min(^^i, ^^2)- Сгруппировав члены Ai+i,B+i получим формулы, для случая KR2 ^ KRi:

D (niUi+i + H2Vi+i) . diUi+i + d2Vi+i Вг-k--—k— =d

Соответствующие формулы Ui,Vi имеют вид:

Ura = 0, vn = 1, Ui = (Ui+rni + Vi+in2)/k, Vi = (—Ui+idi — Vi+id2)/k, 1 ^ г < п. (2)

Если KRi > KR2:

Ura = 0, Vn = 1, Ui = (Ui+iU2 + Vi+iHi)/k, Vi = (—Ui+i¿2 — Vi+idi)/k, 1 ^ %<П. (3)

В начале обратного хода u,ra, vra присваиваются нуль и один, соответственно, щ, Vi — рациональные числа, в ходе расчетов идет накопление к'п-г, где г — текущая итерация. КБ — целые числа. Формулы (2) дают нам дроби, тогда как КБ должны быть целые числа. В ходе расчетов идет накопление к'п-г, где г — текущая итерация. Записав соотношение Безу для текущей итерации получим u,iAi + ViBi = d, возьмем остаток от деления на Ai [17]. Тогда можно переписать формулы:

u'i = Ui mod Ai, v[ = Vi mod Ai, 1 ^ i <n (4)

u'iAi + v'iBi = d (mod Aj), u^Ai + v\Bi = d + tAi, t e Z (5)

Из последнего выводится требуемое выражение для коэффициентов Безу:

UiAi + ViBi = d, где и = u'i — t, v = v'i, u,v e Z (6)

u,v ^ ответ. Если Ai+i/Bi+i ^ л/к, то запускается AE с формулами (1). Покажем, как можно эффективно вычислять х = k-i mod А, см. [17]. По определению,

кх mod А = 1 ^ кх = 1+ рА (7)

Возьмем а = А mod к. Если в (7) взять остаток от деления на к, получим рА = —1 mod к & р = —а-1 mod к, р = —а-1 + гк, re Z.

1 + (—а-1 + г к) А л 1 — а-1 А , . , „ 1 — а-1 А,

х =---;-— = г А +----^ к-1 mod А =--- (modA) (8)

к к к

3.2. Наличие дополнительных множителей

По теореме 1 в ходе прямого хода алгоритма SJWA-GCD не возникает никаких дополнительных множителей. Тем не менее в рамках обратного хода при вычислении и', v1 в знаменателе может стоять не обязательно кя, а 2гк5.

Пусть для г + 1 выполнено А^+1 щ+1 + Bi+1 Vi+1 = d. Первый случай: на г шаге выполнялся SJWA-GCD. Пусть KR1 и KR2 при сокращении получились четными, приведение их к нечетному — деление на 21, 2т соответственно. Подставив значения KR1, KR2 можно найти щ, Vi.

• KR2 ^ KRI ^ т, то и =

• KR2 ^ KRI < т, то и =

• KR1 > KR2, I ^ т, то и =

ui+ini+2l mvi+in2 ,Vi = ui+idi+2l-mVi+ -id,2

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

2lk ■ 2lk

2m~l ui+1ni+vi+1n2 ,Vi = 2m-lui+idi+Vi+ A, to

2mk ■ 2mk

Ui+in2+2l~mvi+ini ,Vi = ui+id2+2l-mVi+ -idi

2lk ■ 2lk

2m~l ui+in2+vi+ini ,Vi = 2m-lui+id2+Vi+ -idi

2mk ■ 2mk

• КК\ > КК2, I < т, то щ =

После расчета необходимых коэффициентов может оказаться, что Ащ + В^ = 2Г1с1, т.е присутствует дополнительный множитель в соотношении Безу. В этом случае необходимо: Щ = щ/2г% ы = Уг/2Г1. А дальше необходимо пользоваться формулами (4)-(6).

чая, если МОИ — нечетно и необходимо сократить на 21. Тогда,

Щ = Уг = 21т+1 - иг+1[А/В]г (10)

Аналогично, если после этого соотношение Безу будет нечетным и равняться 2гк щ = щ/2г% VI = Пг/2Г\ Если на всех шагах алгоритма выполняется А^/В^ ^ л/к, то выполняется всегда АЕ, и в столбцах щ, будут храниться коэффициенты Безу.

3.3. Корректность расширенного алгоритма

Теорема 2. Пусть А, В — целые числа, для которых ищем, коэффициенты Безу, п — число шагов ЯЗША-ОСБ, d = gcd(А, В), г — номер текущего шага, следуя формулам, (2)-(6), (9), (10), получим, для г = £ иАг + уВг = d.

Доказательство.

• I = п. Очевидно: ипАп + УпВп = d.

• г = Ь и для г = Ь — 1 выполняется соотношение Безу. Если при г = Ь выполнялся алг. БЛША-ОСБ, то выразив А+\, В + через А^ В1 получим формулы (2) или (9). Разница формул заключается в том, что на каждом шаге необходимы нечетные числа. И при вычислении редукций могут возникнуть четные числа.

Аналогично, если выполнялся АЕ, получим формулы (1), (10).

По теореме 1 в рамках прямого хода никаких дополнительных множителей не возникает. Но, если иьАк, УкВк — нечетные, то икАк + УкВк = 2Ы. Значит, иг = щ/21, Уг = Уг/21. ии щ — рациональные числа. Избавляемся от 21кв в знаменателе иг, Уг по формуле (4), (5). (и — Ь)Аг + У^Вг = ^ И получили формулЫ (6). □

3.4. Примеры

Пример 1. Решить уравнение 89х = 1 (mod 97) 97 и 89 — простые числа, к = 16.

Таблица 1: пошаговое решение

№ вг coef KRi KR2 / % un Vn u' v' и V

1 97 89 Г -1) V2 2 J 1 45 _ _ 2/k -2/k 85 12 -11 12

2 45 1 \ / _ _ 45 0 0 1 _ _ _ _

Знак / означавт [Ai/Bi], % означавт Ai mod Bi. На, первом шаге запускается алгоритм SJWA-GCD. На, втором шаге запускается алгоритм Евклида. Условие выхода: MOD = 0. Коэффициенты coef из алгоритма, SJWA.

В рамках обратного хода, на, первом шаге выбраны формулы KR2 > KR1: щ = (и2п\+ +v2n2)/k = 2/к, v\ = (u2d\ + v2d2)/k = -2/k. u[ = щ mod Ai = 85 V\ = Щ mod A\ = 12.

U^M + v[Bi = 8245 + 1068 = 9313 = 1 + tAx, t = 96 и = u[ -1 = 85 - 96 = -11 v = v[ = 12. Проверка: 89 ■ 12 — 97 ■ 11 = 1. Ответ: 12.

Пример 2. Решить уравнение 405ж = 1 (mod 971) gcd(971, 405) = 1, k = 16.

На, первом шаге запускается алгоритм SJWA-GCD. На, втором и третьем шаге запускается алгоритм Евклида. На, четвертом и пятом, запускается алгоритм SJWA-GCD. Условие выхода: KR\ = 0 (в рамках другого примера может быть KR2 = 0). Коэффициенты coef из алгоритма, SJWA.

Таблица 2: пошаговое решение

№ вг coef KR\ KR2 / % Un Vn u' v' и V

1 971 405 i1 yl5 1J 43 319 _ _ -173 8192 435 8192 437 585 -244 585

2 319 43 _ _ _ 7 9 19 -135 256 263 230 -31 230

3 4 43 9 9 7 1) 1 3 4 7 25p 128 15 128 19 128 -1 128 1 3 24 4 -5 -3 24 4

5 3 1 CO t—ч 0 1 _ _ 0 1 _ _ _ _

Знак / означает [Ai/Bi], % означает Ai mod В^ По умолчанию и5 = 0 v5 = 1-и4 = (и5п\ + v5n2)/k = 15/16, v4 = (u5di + v5d2)/k = —1/16. На данном шаге произошло лишнее сокращение на два в KR2, т.к там было четное число. Запишем соотношение Безу: (9 ■ 15 — 7)/16 = 8. Возник доп. множитель — степень двойки. Увеличим знаменатель до 8 ■ 16 = 128, т.е. и4 = 15/128, vA = -1/128.

Для проверки найдем коэффициенты Безу (КБ) для четвёртого шага алгоритма. и'4 = и4 mod А4= 15/128 mod 9 = 15 ■ 5 mod 9 = 3. v'4 = v4 mod A4=-1/128 mod ^4. Найдем t. 9 ■ 3 + 4 ■ ^5^1 + tA4, t = 6 и = u'4 - t = -3. v = v'4 = 4. Соотношение Безу: -3 ■ 9 + 4 ■ 7 = 1

На третьем шаге применяем формулы из РАЕ. и3 = -1/128, v3 = (15 + 4 ■ 1)/128 = 19/128. Проверка: (19-9-43-1)/128 = 1. Найдем К Б. и'3 = -1/128 mod 43 = 1, v'3 = 19/128 mod 43 = 24. 43 + 24 ■ 9 = 259 = 1 + 43í, t = 6, и = 1 - 6 = -5 v = 24.

На втором шаге вновь применяем формулы из РАЕ. щ = 19/256, V2 = -(1 ■ 2 + 19 ■ 7)/256.

%

двойка в числителе V2, записав соотношение Безу, добавили еще одну двойку в знаменатель и получилось 256 вместо 128. Найдем К Б. и'2 = 19/256 mod 319 = 263, v'2 = -135/256 mod 319 = 23G. 263 ■ 319 + 23G ■ 43 = 93787 = 1 + 319Í, t = 294, и = -31 v = 23G.

На первом шаге снова найдем ul = (2 ■ 19 ■ 15 - 135)/(32 ■ 256) = 435/8192, Vi = (-2 ■ 19 - 135)/(32 ■ 256) = -173/8192. В К Ri появляется лишнее сокращение на двойку, поэтому в числителе Ui,Vi появляется два. Записав соотношение Безу также появляется два в знаменателе, поэтому вместо 16 ■ 256 появляется 32 ■ 256. и\ = -173/8192 mod 971 = 437, v[ = 435/8192 mod 971 = 585. 437 ■ 971 + 4G5 ■ 585 = 661252 = 1 + 971Í, t = 681, и = 437 - 6881 = -244, v = 585. Проверка: -244 ■ 971 + 4G5 ■ 585 = 1. Ответ: 585.

Поиск КБ на каждом шаге был сделан для наглядности. В действительности эту процедуру (заполнение столбцов u',v',u,v) нужно провести только для первого шага.

4. Заключение

В данной статье описывается схема расширенного алгоритма Джебелеана-Вебера- Се-джелмаси, позволяющая вычислять коэффициенты Безу и вычислять обратные элементы быстрее, чем в случае классического алгоритма Евклида. Сложность алгоритма Джебелеана-Вебера-Седжелмаси в худшем случае составляет 0(п2/ log(n)) для двух п битных чисел, когда сложность алгоритма Евклида в худшем случае составляет 0(п2). Практический расчет при к, не превышающем размер машинного слова, реализуется быстрее против классического алгоритма Евклида. С другой стороны в случае очень больших чисел предпочтительнее использовать алгоритмы типа Шонхаге, работающие за 0(п log2(n) log(log(n))). Для небольших чисел можно использовать алгоритм Евклида или бинарный алгоритм. Текущие исследования автора связаны с обобщением данного алгоритма на многочлены для вычисления мультипликативного обратного для элементов поля классов вычетов по модулю некоторого неприводимого многочлена.

СПИСОК ЦИТИРОВАННОЙ ЛИТЕРАТУРЫ

1. Lehmer D. H. Euclid's algorithm for large numbers // American Mathematical Monthly. 1938. Vol. 45, №4. P. 227-233.

2. Schönhage A. Schnelle Berechnung von Kettenbruchentwicklungen // Acta Informat. 1971. Vol. 1, №2. P. 139-144.

3. Crandall R. D., Pomerance C. Prime Numbers. Springer-Verlag New York. 2005. P. 597.

4. Stein J., Computational problems associated with Racah algebra //J. Comp. Phvs. 1967. Vol. 1, №3. P. 397-405.

5. Knuth D.E. The Art of Computer Programming: Seminumerical Algorithms, volume 2 // Addison-Wesley Professional, 3 edition. 1997. P. 784.

6. Sorenson J. An Analysis of Lehmer's Euclidean GCD Algorithm // Proc. of the International Symposium on Symbolic and Algebraic Computation. 1995. P. 254-258.

7. Cesari G. Parallel implementation of Schonhage's integer GCD algorithm // Algorithmic Number Theory. ANTS 1998. Lecture Notes in Computer Science. 1998. Vol. 1423. P. 64-76.

8. Stehle D., Zimmermann P. A Binary Recursive Gcd Algorithm. // Algorithmic Number Theory. ANTS 2004. Lecture Notes in Computer Science. 2004. Vol. 3076. P. 411-425.

к

Rep. 1990. №979. P. 1-20.

10. Sorenson J. Two Fast GCD Algorithms // J. of Algorithms. 1994. Vol. 16, №1. P. 110-144.

11. Dolgov D. Polynomial GCD as a solution of system of linear equations // Lobachevskii J Math. 2018. Vol. 39, №7.

12. Dolgov D. GCD calculation in the search task of pseudoprime and strong pseudoprime numbers // Lobachevskii J Math. 2016. Vol. 37, №6. P. 734-739.

13. Weber K. The Accelerated Integer GCD Algorithm // ACM Trans. Math. Software. 1995. Vol. 21, №1. P. 111-122.

14. Sedjelmaci S.M. Jebelean-Weber's algorithm without spurious factors // Information Processing Letters. 2007. Vol. 102, №6. P. 247-252.

15. Zimmermann P. 50 largest factors found by ECM // https: / / members.loria.fr/PZimmermann / records / top50.html

16. Сагалович Ю.Л. ВВЕДЕНИЕ В АЛГЕБРАИЧЕСКИЕ КОДЫ. IIIIIIII РАН. 2011. Р. 302.

17. Ishmukhametov S. Т., Mubarakov В. G., Al-Anni К. М. Calculation of Bezout's Coefficients for the k-Arv Algorithm of Finding GCD // Russ Math. 2017. Vol. 61, №11. P. 26-33.

18. Бассалыго Л. А., Зиновьев В. А. Замечание об уравновешенных неполных блок-схемах,

формации. 2017. Т. 53, №1. С. 56-59.

19. Беспалов Е. А., Кротов Д. С. МДР-коды в графах Дуба // Проблемы передачи информации. 2017. Т. 53, №2. С. 40-59.

REFERENCES

1. Lehmer, D. Н. 1938, "Euclid's algorithm for large numbers", American Mathematical Monthly, vol. 45, no. 4, pp. 227-233.

2. Schonhage, A. 1971, "Schnelle Berechnung von Kettenbruchentwicklungen", Acta Inform,at, vol. 1, no. 2, pp. 139-144.

3. Crandall, R., Pomerance, C. 2005, "Prime Numbers", Springer-Verlag New York, pp. 579.

4. Stein, J. 1967, "Computational problems associated with Racah algebra", J. Сотр. Phys., vol. 1, no. 3, pp. 397-405.

5. Knuth, D.E. 1997, "The Art of Computer Programming: Seminumerical Algorithms, volume 2", Addison-Wesley Professional, 3rd edition, pp. 784.

6. Sorenson, J. 1995, "An Analysis of Lehmer's Euclidean GCD Algorithm", Proc. of the International Symposium, on Symbolic and Algebraic Computation, pp. 254-258.

7. Cesari, G. 1998, "Parallel implementation of Schönhage's integer GCD algorithm", Algorithmic Number Theory. ANTS 1998. Lecture Notes in Computer Science, vol. 1423, pp. 64-76.

8. Stehle, D., Zimmermann, P. 2004, "A Binary Recursive Gcd Algorithm", Algorithmic Number Theory. ANTS 2004. beet. Notes in Сотр. Science, vol. 3076, pp. 411-425.

9. Sorenson, J. 1990, "The fc-arv gcd algorithm", Univ. of Wisconsin-Madison,Сотр. Sciences Tech. Rep., no. 979, pp. 1-20.

10. Sorenson, J. 1994, "Two Fast GCD Algorithms ", J. of Algorithms, vol. 16, no. 1, pp. 110-144.

11. Dolgov, D. 2018, "Polynomial GCD as a solution of system of linear equations", Lobachevskii J Math, vol. 39, no. 7.

12. Dolgov, D. 2016, "GCD calculation in the search task of pseudoprime and strong pseudoprime numbers", Lobachevskii J Math, vol. 37, no. 6, pp. 734-739.

13. Weber, K. 1995, "The Accelerated Integer GCD Algorithm", ACMTrans.Math. Software, vol. 21, no. 1, pp. 111-122.

14. Sedjelmaci, S.M. 2007, "Jebelean-Weber's algorithm without spurious factors", Information Processing Letters, vol. 102, no. 6, pp. 247-252.

15. Zimmermann, P. "50 largest factors found by ECM", https://members.loria.fr/PZimmermann/ records/top 50 .html

16. Sagalovich, J.L. 2011, "INTRODUCTION TO ALGEBRAIC CODES [IN RUSSIAN]", 11 TP RAS, pp. 302.

17. Ishmukhametov, S.T., Mubarakov, B.G., Al-Anni, K.M. 2017, "Calculation of Bezout's Coefficients for the k-Arv Algorithm of Finding GCD", Russ Math, vol. 61, no. 11, pp. 2633.

18. Bassalvgo, L.A., Zinoviev, V. A., Al-Anni, K.M. 2017, "Remark on balanced incomplete

Information Transmission, vol. 53, no. 1, pp. 51-54.

19. Bespalov, E. A., Krotov, D.S., Al-Anni, K.M. 2017, "A IDS codes in Doob graphs", Problems of Information Transmission, vol. 53, no. 2, pp. 136-154.

Получено 14.06.2018 Принято в печать 17.08.2018

i Надоели баннеры? Вы всегда можете отключить рекламу.