Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Простая программа питон

Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.

По дате
По рейтингу
Аватар пользователя
Высший разум
3мес
1234567891011121314
 x, y = map(int, input().split())

a, b, c = x, y, 0
while a:
  if b > a: a, b = b, a
  a -= b
  c += 1
print('Обычный, итераций:', c, ' НОД:', b)

a, b, c = x, y, 0
while b:
  a, b = b, a % b
  c += 1
print('Модифицированный, итераций:', c, ' НОД:', a) 

Для модифицированного min / max не нужны. А для простого можно обойтись перестановкой уменьшаемого и вычитаемого.

Аватар пользователя
Высший разум
3мес

Да элементарно:

123456789101112131415161718
 a, b = map(int, input().split())
cm = cc = 0

x, y = max(a, b), min(a, b)
while y:
    m = x % y
    x, y = max(m, y), min(m, y)
    cm += 1
gm = x

x, y = max(a, b), min(a, b)
while y:
    m = x - y
    x, y = max(m, y), min(m, y)
    cc += 1

print(f"НОД мод.: {gm}, обычн.: {x}")
print(f"Шагов мод.: {cm}, обычн.: {cc}") 


Для двух соседних чисел Фиббоначчи число шагов там и там будет почти одинаковым. А для произвольных наугад взятых обычно отличается довольно сильно.

Первый цикл - модифицированный алгоритм (делениями), второй - обычный (вычитаниями).