Алгоритм Евклида (отыскания НОД 2-х чисел)
Пусть a>b. Тогда в силу теоремы делимости находим ряд равенств:
a=bq1+r1, 0<r1<b
b=r1q2+r2, 0<r2<r1
r1=r2q3+r3, 0<r3<r2
...…………………
rn-2=rn-1qn+rn, 0<rn<rn-1
rn–1=rnqn+1.
Получение последнего равенства (то есть равенства с разложением без остатка) неизбежно, т.к. ряд b, r1, r2, …. – ряд убывающих целых чисел, который не может содержать более b положительных чисел, а значит рано или поздно в этом ряду возникнет «0».
Видим, что общие делители a и b, b и r1, r1 и r2,..., rn–1 и rn совпадают с делителями числа rn (a,b)=(b,r1)=(r1,r2)=…=(rn-1,rn)= rn.
Таким образом, (a,b)=rn.
Вышеизложенная идея нахождения НОД может быть реализована в виде алгоритма. Ниже приведены несколько вариантов реализации алгоритма Евклида.
Реализация алгоритма Евклида (вариант алгоритма с вычитанием)
Вход: a, b>0.
1.Если a>b Шаг 3
если a<b Шаг 2
если a=b Шаг 5 (выход)
2.Меняем местами a и b.
3.a:=a–b
4.Возвращаемся на Шаг 1.
5. Выход: a – НОД
Ниже приведен пример использования этой реализации алгоритма.
Пример
a=603, b=108
Преобразования алгоритма записаны в таблицу, верхняя строка которой содержит значение переменной a, нижняя – содержимое переменной b. Каждый столбец таблице соответствует состоянию процесса на отдельном шаге.
a | |||||||||||||||
b |
Ответ: НОД(603,108)=9.
Реализация алгоритма Евклида (вариант алгоритма с делением с остатком)
Вход: a, b >0.
1. Находим разложение a=bq+r, 0≤r<b
2. если r=0 Шаг 5 (выход)
3. a:=b; b:=r.
4. Возвращаемся на Шаг 1
5. Выход: b – НОД.
Пример
a=603, b=108
a | ||||||
b |
603=5·108+63
108=1·63+45
63=1∙45+27
45=1∙27+18
27=1∙18+9
18=2∙9+0
Ответ: НОД(603,108)=9.
Дата добавления: 2018-11-26; просмотров: 880;