Наибольший общий делитель (НОД) чисел a и b - это наибольшее число, которое делит их обоих без остатка.
Один из способов найти НОД двух чисел - это алгоритм Евклида, который основан на наблюдении, что если r
- это остаток от деления a
на b
, то gcd(a, b) = gcd(b, r)
. В качестве базового случая мы можем использовать gcd(a, 0) = a
.
Напишите функцию под названием НОД , который принимает параметры a
и b
и возвращает их наибольший общий делитель.
Ответы:
Это в стандартной библиотеке .
Исходный код
inspect
модуля на Python 2.7:Начиная с Python 3.5,
gcd
находится вmath
модуле ; тот,fractions
что устарел. Более того,inspect.getsource
ни один из методов больше не возвращает поясняющий исходный код.источник
fractions.gcd(1, -1)
есть ,-1
но1 > -1
то есть1
делит как1
и-1
без остатка , и это больше , чем-1
, см bugs.python.org/issue22477gcd(1, -1) == -1
мне кажется вполне законным.fractions.gcd()
как есть (работает с элементами евклидова кольца).math.gcd(1, -1)
возвращается1
.Алгоритмы с mn могут работать очень долго.
Этот работает намного лучше:
источник
x
до его назначения. Вы назначеныy
наx
первый , так что теперьy
собирается быть установлен0
(какy % y
всегда 0).Эта версия кода использует алгоритм Евклида для поиска GCD.
источник
def gcd(a, b): if b == 0: return a return gcd(b, a % b)
источник
источник
Очень краткое решение с использованием рекурсии:
источник
используя рекурсию ,
используя while ,
используя лямбда,
источник
Другой подход, основанный на алгоритме Евклида.
источник
источник
Я думаю, что другой способ - использовать рекурсию. Вот мой код:
источник
gcd(10,5)
...в python с рекурсией:
источник
источник
Для
a>b
:Для любого
a>b
илиa<b
:источник
b, a = a, b
. попробуйте узнать больше о языкеМне пришлось сделать что-то подобное для домашнего задания с использованием циклов while. Не самый эффективный способ, но если вы не хотите использовать функцию, это работает:
источник
источник
Этот код вычисляет gcd для более чем двух чисел в зависимости от выбора, сделанного # пользователем, здесь пользователь указывает число
источник
Обмен значениями не сработал для меня. Поэтому я просто создал зеркальную ситуацию для чисел, которые вводятся либо в <b ИЛИ a> b:
источник
great_common_devisor (A)
источник
источник
break
пытается достичь это заявление.Вот решение, реализующее концепцию
Iteration
:источник