Алгоритм нахождения НОД (наибольшего общего делителя). Вычисляется при помощи алгоритма Евклида.
НОД — для не отрицательных чисел a и b, которые > 0 — это не отрицательное, целое число которое делит и а и b.
Алгоритм Евклида
Если а = 0, вернуть b
Если b = 0, вернуть a
Далее, необходимо поделить большее из 2-ух чисел на меньшее и присвоить получившийся остаток от деления большему числу.
Пример:
- НОД(3918848, 1653264) = 3918848 % 1653264 = 612320
- НОД(612320, 1653264) = 1653264 % 612320 = 428624
- НОД(612320, 428624) = 612320 % 428624 = 183964
- НОД(183964, 428624) = 428624 % 183964 = 61232
- НОД(183964, 61232) = 183964 % 61232 = 0
- НОД(0, 61232) => 61232
def gcd(a, b): if a == 0: return b if b == 0: return a if a >= b: return gcd(a%b, b) if b >= a: return gcd(a, b%a) a = 18 b = 35 print(gcd(a, b)) # >>> 1
Еще одна версия, с не меньшей производительностью, но без явного ветвления (if):
def gcd2(a, b): if a == 0 or b == 0: return max(a, b) return gcd2(b%a, a)