Перейти к основному содержимому

Евклид и классические алгоритмы на числах

Разработчику

Зачем отдельная статья

В введении алгоритм Евклида уже связан с ритмами и НОД. Здесь — чуть больше практики: сложность, применения в коде и соседние «карманные» алгоритмы, которые не требуют графов и сортировок.


Алгоритм Евклида

НОД(a, b) — наибольшее число, делящее оба аргумента без остатка.

АЛГОРИТМ НОД(a, b)
пока b ≠ 0
(a, b) := (b, остаток a от деления на b)
конец пока
вернуть |a|
КОНЕЦ
СвойствоЗначение
ВремяO(log min(a, b)) — число шагов ограничено логарифмом меньшего аргумента
ПамятьO(1) в итеративной версии
История«Начала» Евклида, ~300 г. до н. э.

Расширенный алгоритм Евклида дополнительно находит коэффициенты x, y в тождестве Безу: a·x + b·y = НОД(a, b). Это нужно в криптографии (обратимые элементы по модулю).

Где применяется

  • Сокращение дробей p/q — делить числитель и знаменатель на НОД(p, q).
  • Периодичность событий с циклами разной длины — НОК через НОК(a,b) = |a·b| / НОД(a,b).
  • Криптография (RSA и др.) — см. информационная безопасность.

Жадный выбор на каждом шаге

Евклид жадный: на каждом шаге заменяет пару на «меньшую» пару (b, a mod b), не откатываясь назад. Для НОД это даёт оптимум.

Жадный алгоритм в общем случае берёт локально лучший шаг. Локальный оптимум не всегда глобальный — контрпример задача коммивояжёра в тренировке мышления. Для кратчайших путей с неотрицательными весами жадность работает в алгоритме Дейкстры.


Другие классические приёмы (кратко)

АлгоритмЗадачаСложность
Двоичное возведение в степеньaⁿ mod m для больших nO(log n) умножений
Решето ЭратосфенаВсе простые до NO(N log log N)
Проверка простоты (наивная)Делители до √nO(√n)

Эти алгоритмы часто встречаются в олимпиадной и прикладной математике; в промышленном коде чаще вызывают готовые библиотеки, но понимание шагов помогает отлаживать граничные случаи.


Связь с музыкой и ритмом

Равномерное размещение ударов между паузами — та же схема «вычитания остатка», что и НОД. Один алгоритмический каркас объединяет:

  • древнегреческую теорию чисел;
  • африканские и балканские ритмы;
  • современный анализ данных, где периодичность ищут через делимость длин циклов.

Подробнее контекст — в статье «Алгоритмы» (раздел про алгоритм Евклида).


Связанные материалы

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").