Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
§ 2.4. Алгоритм ЭвклидаАлгоритм Эвклида предназначен для вычисления наибольшего общего делителя двух натуральных чисел, и мы посвятим начало этого параграфа подробному определению наибольшего общего делителя. Во-первых, мы говорим, что целое число Пусть Определение наибольшего общего делителя подсказывает следующий алгоритм его вычисления. Если числа а и b заданы, то найдем все положительные делители числа а и все положительные делители числа в оба множества, и возьмем наибольшее из них. Оно и будет наибольшим общим делителем. Эта процедура совсем проста, однако, как мы увидим в следующей главе, она чрезвычайно неэффективна при больших К счастью, наибольший общий делитель можно подсчитать и другим, весьма эффективным способом. Эвклид приводит его в предложениях 1 и 2 книги VII своих «Элементов». Алгоритм Эвклида действует следующим образом. Разделим а на Применим алгоритм Эвклида для вычисления наибольшего общего делителя чисел 1234 и 54. Деления с остатком выглядят так:
Последний ненулевой остаток равен 2, поэтому
Отметим, что неполные частные не принимают непосредственного участия в подсчете наибольшего общего делителя. Опишем теперь алгоритм, следуя модели, предложенной в § 2.1 и § 2.2. Алгоритм ЭвклидаВвод: натуральные числа а и b, а Шаг 1. Положить Шаг 2. Заменить значение Шаг 3. Если Шаг 4. Заменить значение А на значение В, значение В на значение Таким образом, для вычисления наибольшего общего делителя нам необходимо лишь выполнить несколько делений с остатком. Но почему наибольший общий делитель совпадает с последним ненулевым остатком в последовательности делений? Да и вообще, почему в последовательности остатков всегда появится нуль? Заметим, что если бы нуль не появлялся, то процедура никогда бы не остановилась. Начнем со второго вопроса. Тем самым мы докажем, что алгоритм всегда завершает работу. Предположим, что для того, чтобы найти наибольший общий делитель чисел a и b, мы проделали следующие деления с остатком:
Забудем на минуту про левый столбец. В правом столбце стоит последовательность остатков. Заметим, что в ней всякий остаток меньше предыдущего, а также, что все остатки неотрицательны. Переписав неравенства друг за другом, мы получаем цепочку
Поскольку между b и нулем есть лишь конечное число целых чисел, последовательность остатков не может продолжаться бесконечно. Однако в конце ее может стоять только нуль, а значит, алгоритм наверняка остановится. С помощью рассуждения из предыдущего параграфа можно получить верхнюю оценку на число делений, необходимое для вычисления наибольшего общего делителя. Вернемся к неравенствам (4.1). Каждое число в последовательности строго меньше предыдущего. Поэтому наибольшее возможное значение остатка в каждом делении на единицу меньше значения остатка на предыдущем делении. Если бы в каждом цикле это наибольшее возможное значение достигалось, то для получения нулевого остатка нам потребовалось бы На самом деле, несложно показать, что при
Мы уже видели, однако, что в наихудшем возможном случае все неполные частные равны 1. Запишем теперь все деления, начиная с последнего. В силу взаимной простоты чисел мы получаем
Вот как выглядит последовательность остатков при
Значит, наименьшая пара взаимно простых чисел
|
1 |
Оглавление
|