path: Главная\Алгоритмы\Алгоритм Евклида


язык:Turbo Pascal

Очень часто для нахождения НОД (Наименьшего Общего Делителя) применяют метод, который называется алгоритмом Евклида.

Это один из самых древних алгоритмов, он описан еще в "Началах" Евклида.

Прежде чем описать сам алгоритм, укажем несколько свойств НОД, на которые опирается алгоритм Евклида.

Пусть a и b - отличные от нуля натуральные числа, причем a > b.

  • НОД(а, b) = НОД(а-b, b)
  • НОД(а, a) = a
  • НОД(а, 0) = a

    Перечисленные равенства подсказывают идею алгоритма нахождения НОД: нужно от большего числа отниамть меншее до тех пор, пока они не станут равными, после чего НОД найдется по свойству 2)

    Пример: НОД(530, 155)

    	 a	b
    	530    155
    	375    155
    	220    155
    	65     155
    	65     90
    	65     25
    	40     25
    	15     25
    	15     10
    	5      10
    	5      5
    
    Алгоритм будет следующим:
    while a<>b do
       if a>b then a:=a-b else b:=b-a;
    NOD:= a;
    

    Если проанализировать работу данного алгоритма, то можно заметить, что одно и то же число нужно отнимать несколько раз. Этого можно избежать, если вместо несколькиз вычитание находить остаток от деления большего числа на меньшее. В этом случае свойство 1) можно записать в виде НОД(a, b) = НОД(a mod b, b). Для окончания работы алгоритма нужно воспользоваться свойством 3)

    Пример: НОД(530, 155)

    	 a	b
    	530    155
    	65     155
    	65     25
    	15     25
    	15     10
    	5      10
    	5      0
    
    Алгоритм будет выглядеть следующим образом:
    while (a<>0) and (b<>0) do
       if a>b then a:=a mod b else b:=b mod a;
    if a=0 then NOD:= b else NOD:= a;
    



    MAFIA's Top100 Rambler's Top100 Rambler's Top100