44
Самый знаментий алгоритм
В предыдуших статьях этого раздела приведили многодисленные примеры алгоритмов и рассказывалось об общих принципах их записи на алгоритмическом языке. Здесь же автор подробно остановился на одном единственном алгоритме — это один из самых древних и наверное самый известный математический алгоритм.
Доктор физико-mатематических наук
С. А. АБРАМОВ
В «Началах» Евклида приведен алгоритм нахождения наиболее делителя (НОД) неотрицательных целых чисел, основанный на следующих свойствах этой величины. Пусть и — одновременно не равные нулю целые неотрицательные числа, и пусть . Тогда, если , то НОД , а если , то для чисел и , где — остаток от деления на , выполено равенство НОД : при любом целом числа и имеют те же общие делители, что и числа , а остаток есть число вида .
Применение алгоритма Евклида к числам и состоит в выполненении друг за другом серии однозпинных шагов, каждый из которых начинается с проверки, равно ли второе число нулю. Если не равно, то вычисляется остаток от деления первого числа на второе, затем первое число заменяется вторым, а второе — вычисляемым остатком, и произходит переход к следующему шагу. Если же второе число равно нулю, то все вычисления прекращаются, а значением НОД объявляется первое число.
Так при вычислении НОД (39,15) переходит от одной пары чисел к другой в следующей последовательности: (39,15), (15,9), (9,6), (6,3), (3,0). Получаем, что НОД (39,15)=3.
Остаток всегда меньше делителя, а убывающая последовательность неотрицательных целых чисел не может быть бесконечной. Поэтому применение алгоритма Евклида на некоторых шаге закончится из-за обращения в нуль очередного остатка.
Задание 1. Найдите НОД (21042, 18921).
Задание 2. Полностью сократите дробь, записываем которую есть , а запись значения .
Большинство древних алгоритмов со временем вытесяло из вычисли-
45
тельной практики более новых алгоритмов. Алгоритм Евклида избежал этой части прежде всего благодаря своей экономности. Значение НОД(f,g) можно вычислить многоими способами, например с помощью следующого тривиального алгоритма: если , то взять в качестве НОД(f,g) значение , иначе выбрать из чисел первого, при делении на короче и дают нулевые остатки. Но, как и другие подобные алгоритмы, последний алгоритм сликом разорителен. Например, в случае взаимно простых и он требует делений. Исследуем теперь число делений, требуемых алгоритмом Евклида, и показем, что оно при больших значениях существует меньше . Будем рассматривать последовательность всех остатков, которые вычисляются в процессе выполнения алгоритма Евклида. Полезно обозначить исходные числа не через , а через (считаем, что ). Получаемые ненулевые остатки обозначим через , частные от деления на на на — через :
здесь НОД()=. Остаток всегда меньше делителя, поэтому . Вследствие этого каждое из частных больше или равно единице.
Лемма 1. При выполняется неравенство .
Доказательство. .
Лемма 2. Пусть — такое натуральное число, что применение алгоритма Евклида к не заканчивается после делений (то есть ). Тогда .
Доказательство. Используя лемму 1, получаем
Теорема. Число делений, требуемых алгоритмом Евклида, не превыходит .
Доказательство. Из леммы 2 вытекает, что если — натуральное число, для которого , то число
Таким образом, для решения задачи (2) надо применять к и алгоритм Евклида, рассматривая на каждом шаге его применения, кроме двух чисел, которые рассматриваются и прежде, еще и соответствующие этим числам множителей и . На первом шаге в качестве множителей, со-
46
ответствующих исходным числом и , берется 1,0 и 0,1. Выполнить деление и получив часть и некоторый остаток, надо, если остаток не равен 0, перед переходом к следующему шагу вычислить по формулам , множители, соответствующие получению остатку. Последний ненулевой остаток и соответствующие ему множители и будут удовлетворять (2).
В процессе применения этого алгоритма к , последовательно вычисляются остатки 9; 6; 3; 0 и соответствующие первым тем из них множители 1, -2; -1,3; 2, -5. Таким образом, .
Теперь заметим, что алгоритм можно изменить так, что число требуемых им операций сокращится почти в полтора раза: из двух чисел и достаточно вычислить вместе с только , а затем определить по формуле . Для , мы могли бы положить .
Заддача 4. Докажите, что если числа , дают некоторое решение уравнения (3), то все решения описываются формулой , , где , , , , .
Заддача 5. Пользовать формулы, выписанных в задаче 4, опишите алгоритм, который позволяет проверить, обладает ли уравнение (3) решения в неотрицательных целых числах и если обладает, то позволяет и построить какое-то одно такое решение.
Последовательные деления с остатком, соответствующие схеме (1), лежат и в основе алгоритма целых дробей, который позволяет получить очень интересные приближения числа . Цепной дробью (конечной) называется выражение вида
где — натуральные числа. Цепную дробь (5) кратко записывается в виде . Так как , имеем
Далее этим же способом преобразуем и т. д. В конце концов получим . Дополнительно рассмотрим целые дроби , значения которых называются nodходящими дробями числа . Обозначим несократимые формы подходящих дробей через . Следующие свойства приближений числа подходящими дробями, мы приводим без доказательства:
a)
b) Если для некоторой дроби и подходящей дроби , , выполнен
то .
Нетрудно убедиться, что подходящие дроби числа 15/39 (несократимая форма которого есть 5/13) — это 1/2, 1/3, 2/5. Разности между несократным числом и этим дробями соответственно равны -3/26, 2/39, -1/65.
Свойства a), б) используются в решения разнообразных практических задач, требующих подбора для данного нецелого числа хорошего приближения в виде дроби со сравнительно небольшим значением. Примером может служить задача расчета зубчатой передачи, состоящей из двух шестeren. Передаче число должно быть близко к заданному значению, и при этом число зубьев каждой из шестeren не может превышать неокторой указанной границы.
Заддача 6. Земной год продолжается 365, 242199 суток. Найдите подходящие дроби числа . Какая именно из этих дробей определяет закон черезования простых и высокоэффективных годов в современном календаре?
Заддача 7. Запишите в виде программы на алгоритмческом языке из вашего учебника (см. также статью A. П. Erшова в предыдущем номере) следующей алгоритмы:
a) тривальный алгоритм для вычисления НОД;
b) алгоритм Евклида для вычисления НОД;
c) алгоритм решения целочисленных уравнений вида ;
d) алгоритм для представления отношения в виде цепной дроби.
Алгоритм Евклида допускает и другие обобщения, которые, в частности, используются в приближении irrationalных чисел, в вычислении НОД многочленов. Поэтому и в современной вычислительной практике, основанной на привлечении электронных вычислительных машин, находится применение этого алгоритму, возвращающую к которой 2300 лет.