Тимофей и Сережа не стали слушать разбор задач, так как все решили сами, поэтому им пришлось придумать себе занятие. Они решили играть в следующую игру. Сперва каждый из двух игроков независимо придумывает по натуральному числу. Пусть Тимофей выбрал число
A , а Сережа выбрал число B. Затем по этим двум числам итеративно считается величина X : пока A ≠ B мы либо делаем B = B − A , если B > A , и прибавляем к итоговой величине 1, либо делаем A = A − B , если A > B , и опять прибавляем к итоговой величине 1. В игре выигравает Тимофей, если после этих вычислений получилось число более 20232024, иначе – Сережа.
Тимофей хочет подготовиться к любому исходу, поэтому просит вас написать программу, которая по заданным числам A и B найдет X.
Ваш код уже вполне функционален, но можно внести несколько оптимизаций, чтобы снизить время работы:
Используйте алгоритм Евклида для нахождения НОД:
Вместо последовательного вычитания можно использовать алгоритм Евклида для нахождения наибольшего общего делителя (НОД) чисел A и B. Это позволит значительно ускорить процесс.
Оптимизация ветвления:
Вместо использования ветвления (if-else) для сравнения B и A, можно использовать математический трюк: B = abs(B - A), A = min(A, B). Это упростит код и сделает его более эффективным.
Добавление условия для выхода:
Поскольку вам не нужно вычислять значение X, если оно превысит 20232024, вы можете добавить это условие в цикл.
Вот как будет выглядеть оптимизированный код:
A, B = map(int, input().split())
X = 0
while A != B and X 20232024:
print(X)
else:
print(0) Этот код использует алгоритм Евклида и оптимизированный способ обработки переменных A и B. Также он проверяет условие выхода из цикла и печатает X только если оно меньше или равно 20232024.