Общий размер плитки

тема: Теория чисел (НОД, НОК, остатки) · уровень: базовый

Условие

Во дворе школы решили выложить прямоугольную площадку плиткой без подрезки. Размер площадки — a × b (в сантиметрах). Плитки хотят взять квадратные, и чем больше сторона квадрата, тем меньше возни.

Найдите максимальную сторону квадратной плитки, которой можно выложить площадку a × b без остатка.

Важно: числа могут быть большими (ориентируйтесь на 64-битные целые, как на олимпиадах), но в Python это не проблема.

Формат ввода

В одной строке записаны два целых числа a и b.

Формат вывода

Выведите одно целое число — максимальную возможную сторону квадратной плитки.

Ограничения

Пример

Ввод:

12 18

Вывод:

6

Как решать — идея подхода

Приём: НОД и алгоритм Евклида

Квадратная плитка со стороной x укладывается без подрезки тогда и только тогда, когда x делит и a, и b (то есть a % x == 0 и b % x == 0). Значит, нам нужен самый большой общий делитель двух чисел — НОД(a, b).

Почему это работает: если x — общий делитель, то по стороне a поместится ровно a/x плиток, по стороне b — b/x плиток. Самый большой такой x и даёт «самую крупную плитку».

Как быстро найти НОД: используем алгоритм Евклида. Ключевое наблюдение: НОД(a, b) = НОД(b, a % b). Остаток меньше b, поэтому числа быстро уменьшаются.

План решения:

Сложность: O(log(min(a, b))) по времени, памяти почти не нужно.

Частая ошибка: пытаться перебирать все делители до min(a, b) — это слишком медленно на больших числах. Ещё одна грабля — забыть, что нужно именно максимальный общий делитель, а не просто какой-то делитель.

Разберись руками

Площадка 12×18 см. Хотим квадратные плитки без подрезки: сторона плитки должна ровно укладываться и вдоль 12 см, и вдоль 18 см. Найдём самую большую подходящую сторону на этом примере.

Идея: Сторона квадратной плитки должна быть таким числом, которое делит оба размера площадки без остатка. Поэтому ищем общие делители двух сторон и берём самый большой — это и есть НОД (на примере НОД(12, 18) = 6).

Решить задачу с автопроверкой на Python →

Куда дальше