Наибольший общий делитель двух чисел — это наибольшее число, которое делит оба числа без остатка. Например:
Наибольший общий делитель используется в:
Криптографии (алгоритм RSA)
Упрощении дробей
Оптимизации алгоритмов
Основные методы нахождения Наибольшего общего делителя
Метод перебора (наивный алгоритм)
Принцип:
Перебираем все числа от минимального из двух до 1 и ищем наибольшее, которое делит оба числа.
def gcd_naive(a, b):
min_num = min(a, b)
for i in range(min_num, 0, -1):
if a % i == 0 and b % i == 0:
return i
return 1
Сложность:
O(min(a, b)) — неэффективно для больших чисел.
Алгоритм Евклида (классический)
Принцип:
def gcd_euclidean(a, b):
while b:
a, b = b, a % b
return a
Пример работы:
#gcd_euclidean(48, 18):
48 % 18 = 12 → НОД(18, 12)
18 % 12 = 6 → НОД(12, 6)
12 % 6 = 0 → НОД(6, 0) → ответ 6
Сложность:
O(log(min(a, b))) — очень эффективно.