Алгоритм Евклида находит наибольший общий делитель двух чисел (НОД, greatest common divisor) без разложения на множители. Две версии: через вычитание — , через остаток — .

Зачем нужно

Определение. , если — максимальное число, для которого и .

НОД можно найти через разложения: , , общая часть . Но разложение само по себе стоит на каждое число — см. разложение на простые множители в АиСД L02. Евклид обходится без него.

Как работает

Свойства

  1. ;
  2. , если ;
  3. , ;
  4. , если .

Свойства 2 и 4 — всё, на чём стоит алгоритм: пара заменяется меньшей парой с тем же НОД, пока одно из чисел не станет нулём, а .

Не из лекции: доказательство свойства 2

На лекции записаны два определения — для пары и для — и связь . Целиком:

У пар и одни и те же общие делители.

  • Если и , то — делит .
  • Если и , то — делит .

Множества общих делителей равны, значит, равны и их максимумы. ∎

Не из лекции: доказательство свойства 4

, где — неполное частное. Свойство 2, применённое раз подряд, даёт . ∎

Свойство 3: у единицы единственный делитель 1; на делятся и , и , а больше делителя у нет.

Версия 1: вычитание

пока a ≠ 0 и b ≠ 0
    если a > b
        a = a - b
    иначе
        b = b - a
вывести(a + b)

.

Пример — 11 шагов: , ответ 4.

Версия 2: остаток

Серия вычитаний одного числа — это остаток от деления (Целочисленное деление и остаток): от до пять раз вычиталось 24, и .

пока a ≠ 0 и b ≠ 0
    если a > b
        a = a % b
    иначе
        b = b % a
вывести(a + b)

— на лекции без доказательства. На том же примере — два шага: .

Не из лекции: почему выводится

Цикл кончается, когда одно число — ноль. Тогда — второе число, а по свойству 3 оно и есть НОД. Все шаги сохраняли НОД (свойства 2 и 4), значит, это НОД исходной пары.

Не из лекции: доказательство оценок

Вычитание. Пока оба числа положительны, каждый шаг уменьшает хотя бы на 1. Шагов не больше , а — оценки и совпадают. Оценка точная: пара требует шагов.

Остаток. Лемма: при верно .

  • : ;
  • : частное равно 1, .

Каждый шаг заменяет большее число остатком, то есть уменьшает его больше чем вдвое. После этого большим становится другое число, и следующий шаг уменьшает уже его. За каждые два шага падает хотя бы вдвое, поэтому шагов не больше . Это — см. Асимптотические оценки.

Тонкости

  • На доске оценка записана как — видимо, описка вместо . Разница асимптотически не важна: .

Не из лекции: крайние случаи

  • В обеих версиях . При цикл не выполнится ни разу и выведет 0, хотя определением с лекции не задан: на 0 делится всё, максимума нет.
  • Разница версий заметна на неравных числах: — почти миллиард шагов вычитанием и один шаг с остатком.

Частые ошибки

  • Использовать версию с вычитанием там, где числа могут сильно различаться.
  • Путать остаток % с частным /: a = a / b не сохраняет НОД.