Опубликован: 19.01.2010 | Доступ: свободный | Студентов: 3229 / 453 | Оценка: 4.28 / 4.00 | Длительность: 26:16:00
ISBN: 978-5-9963-0242-0
Специальности: Математик
Лекция 2:

Модульная арифметика

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >

Расширенный алгоритм Евклида

Даны два целых числа a и b. Нам зачастую надо найти другие два целых числа, s и t, такие, которые

s x a + t x b = НОД(a,b)

Расширенный алгоритм Евклида может вычислить НОД (a, b) и в то же самое время вычислить значения s и t. Алгоритм и процесс такого вычисления показан на рис. 2.8.

Здесь расширенный алгоритм Евклида использует те же самые шаги, что и простой алгоритм Евклида. Однако в каждом шаге мы применяем три группы вычислений вместо одной. Алгоритм использует три набора переменных: r, s и t.

Расширенный алгоритм Евклида

увеличить изображение
Рис. 2.8. Расширенный алгоритм Евклида

На каждом шаге переменные r1, r2 и r используются так же, как в алгоритме Евклида. Переменным r1 и r2 присваиваются начальные значения a и b соответственно. Переменным s1 и s2 присваиваются начальные значения 1 и 0 соответственно. Переменным t1 и t2 присваиваются начальные значения 0 и 1, соответственно. Вычисления r, s и t одинаковы, но с одним отличием. Хотя r — остаток от деления r1 на r2, такого соответствия в других двух группах вычислений нет. Есть только одно частное, q, которое вычисляется как r1/r2 и используется для других двух вычислений.

Пример 2.9

Дано a = 161 и b = 28, надо найти НОД (a, b) и значения s и t.

Решение

r = r1 – q x r2  s = s1 – qs2  t = t1 – q x t2

Для отображения алгоритма мы используем следующую таблицу:

q r1 r2 R s1 s2 s t1 t2 t
5 161 28 21 1 0 1 0 1 -5
1 28 21 7 0 1 -1 1 -5 6
3 21 7 0 1 -1 4 -5 6 -23
7 0 -1 4 6 -23

Мы получаем НОД (161, 28) = 7, s = –1 и t = 6. Ответы могут быть проверены, как это показано ниже.

(–1) x 161 + 6 x 28 = 7

Пример 2.10

Дано a = 17 и b = 0, найти НОД (a, b) и значения s и t.

Решение

Для отображения алгоритма мы используем таблицу.

q r1 r2 R s1 s2 s t1 t2 t
17 0 1 0 0 1

Обратите внимание, что нам не надо вычислять q, r и s. Первое значение r2 соответствует условию завершения алгоритма. Мы получаем НОД (17, 0) = 17, s = 1 и t = 0. Это показывает, почему мы должны придавать начальные значения s1 — 1 и t10. Ответы могут быть проверены так, как это показано ниже:

(1 x 17) + (0 x 0) = 17

Пример 2.11

Даны a = 0 и b = 45, найти НОД (a, b) и значения s и t.

Решение

Для отображения алгоритма мы используем следующую таблицу:

q r1 r2 R s1 s2 s t1 t2 t
0 0 45 0 1 0 1 0 1 0
45 0 0 1 0 1

Мы получаем НОД (0,45) = 45, s = 0 и t = 1. Отсюда ясно, что мы должны инициализировать s2 равным 0, а t2 — равным 1. Ответ может быть проверен, как это показано ниже:

(0 x 0) + (1 x 45) = 45

Линейные диофантовы уравнения

Хотя очень важное приложение расширенного алгоритма Евклида будет рассмотрено далее, здесь мы остановимся на другом приложении — "нахождение решения линейных диофантовых уравнений двух переменных", а именно, уравнения ax + by = c. Мы должны найти значения целых чисел для x и y, которые удовлетворяют этому уравнению. Этот тип уравнения либо не имеет решений, либо имеет бесконечное число решений. Пусть d = НОД (a, b). Если d†c, то уравнение не имеет решения. Если d|c, то мы имеем бесконечное число решений. Одно из них называется частным, остальные — общими.

Линейное диофантово уравнение — это уравнение двух переменных: ax + by = c .
Частное решение

Если d|c, то можно найти частное решение вышеупомянутого уравнения, используя следующие шаги.

  1. Преобразуем уравнение к a1x + b1y = c1, разделив обе части уравнения на d. Это возможно, потому, что d делит a, b, и c в соответствии с предположением.
  2. Найти s и t в равенстве a1s + b1t = 1, используя расширенный алгоритм Евклида.
  3. Частное решение может быть найдено:
Частное решение: X0 = (c/d)s и y0 = (c/d)t
Общие решения

После нахождения частного решения общие решения могут быть найдены:

Общие решения: x = x0 + k(b/d) и y = y0 – k(a/d), где k — целое число

Пример 2.12

Найти частные и общие решения уравнения 21x + 14y = 35.

Решение

Мы имеем d = НОД (21, 14) = 7. При 7|35 уравнение имеет бесконечное число решений. Мы можем разделить обе стороны уравнения на 7 и получим уравнение 3x + 2y = 5. Используя расширенный алгоритм Евклида, мы находим s и t, такие, что 3s + 2t = 1. Мы имеем S = 1 и t = –1. Решения будут следующие:

Частное решение : x0 = 5 x 1=5 и  y0 = 5 x (–1) = -5    тогда 35/7 =5
Общие:            x = 5+ k x 2       y= –5 – k x 3           где k — целое

Поэтому решения будут следующие (5, –5), (7, –8), (9, –11)...

Мы можем легко проверить, что каждое из этих решений удовлетворяет первоначальному уравнению.

Пример 2.13

Рассмотрим очень интересное приложение решения диофантовых уравнений в реальной жизни. Мы хотим найти различные комбинации объектов, имеющих различные значения. Например, мы хотим обменять денежный чек 100$ на некоторое число банкнот 20$ и несколько банкнот по 5$. Имеется много вариантов, которые мы можем найти, решая соответствующее диофантово уравнение 20x + 5y = 100. Обозначим d = НОД (20, 5) = 5 и 5|100. Уравнение имеет бесконечное число решений, но в этом случае приемлемы только несколько из них (только те ответы, в которых и x и y являются неотрицательными целыми числами). Мы делим обе части уравнения на 5, чтобы получить 4x + y = 20, и решаем уравнение 4s + t = 1. Мы можем найти s = 0 и t = 1, используя расширенный алгоритм Эвклида. Частное решение: {x_2} = 0 \times 20 = 0 и {y_0} = 1 \times 20 = 20. Общие решения с неотрицательными x и y(0, 20), (1, 16), (2, 12), (3, 8), (4, 4), (5, 0). Остальная часть решений неприемлема, потому что y становится отрицательным. Кассир в банке должен спросить, какую из вышеупомянутых комбинаций мы хотим. Первое число в скобках обозначает число банкнот по 20$ ; второе число обозначает число банкнот по 5$.

< Лекция 1 || Лекция 2: 12345 || Лекция 3 >
Наталья Шульга
Наталья Шульга

Курс "информационная безопасность" .

Можно ли на него записаться на ПЕРЕПОДГОТОВКУ по данному курсу? Выдается ли диплом в бумажном варианте и высылается ли он по почте?

Дмитрий Плешаков
Дмитрий Плешаков

Здравствуйте. На данныйц момент я изучаю курс Математика криптографии и теория шифрования. Стоимость обучения на данном курсе указана 1 руб., но, при этом доступ к лекциям указан платный. Не могли бы Вы прояснить данный момент, и, если доступ платный, какова стоимость лекций и общая стоимость курса.

Заранее благодарен.