Python как упростить код чтобы он не превышал максимальное время работы - Общение Python мододелов

Вопрос Python как упростить код чтобы он не превышал максимальное время работы

Регистрация
28 Июн 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
Ограничение времени: 1 с

Ограничение реального времени:5 с

Ограничение памяти: 256M

Задача:

Тимофей и Сережа не стали слушать разбор задач, так как все решили сами, поэтому им пришлось придумать себе занятие. Они решили играть в следующую игру. Сперва каждый из двух игроков независимо придумывает по натуральному числу. Пусть Тимофей выбрал число

A , а Сережа выбрал число B. Затем по этим двум числам итеративно считается величина X : пока A ≠ B мы либо делаем B = B − A , если B > A , и прибавляем к итоговой величине 1, либо делаем A = A − B , если A > B , и опять прибавляем к итоговой величине 1. В игре выигравает Тимофей, если после этих вычислений получилось число более 20232024, иначе – Сережа.

Тимофей хочет подготовиться к любому исходу, поэтому просит вас написать программу, которая по заданным числам A и B найдет X.

Примеры

Входные данные

12 5

Выходные данные

5

Входные данные

9 9

Выходные данные

0

Примечания

Заметьте, что для хранения чисел

A и B требуются 64-битные типы данных.

Мой код:

enter_list = input().split()

A=int(enter_list[0])

B=int(enter_list[1])

X=0

while A!=B:

if B>A:

B=B-A

else:

A=A-B

X+=1

print(X)
 
Регистрация
18 Ноя 2013
Сообщения
70
Репутация
0
Спасибо
0
Монет
0
01100100 01100101 01100110 00100000 01100111 01100011 01100100 00101000 01100001 00101100 01100010 00101001 00111010 00100000 00001010 00100000 00100000 00100000 00100000 01101001 01100110 00100000 01100010 00111101 00111101 00110000 00111010 00100000 00001010 00100000 00100000 00100000 00100000 00100000 00100000 00100000 00100000 01110010 01100101 01110100 01110101 01110010 01101110 00100000 01100001 00100000 00001010 00100000 00100000 00100000 00100000 01100101 01101100 01110011 01100101 00111010 00100000 00001010 00100000 00100000 00100000 00100000 00100000 00100000 00100000 00100000 01110010 01100101 01110100 01110101 01110010 01101110 00100000 01100111 01100011 01100100 00101000 01100010 00101100 00100000 01100001 00100000 00100101 00100000 01100010 00101001 00100000 00001010 00100000 00001010 01100101 01101110 01110100 01100101 01110010 01011111 01101100 01101001 01110011 01110100 00100000 00111101 00100000 01101001 01101110 01110000 01110101 01110100 00101000 00101001 00101110 01110011 01110000 01101100 01101001 01110100 00101000 00101001 00100000 00001010 01000001 00111101 01101001 01101110 01110100 00101000 01100101 01101110 01110100 01100101 01110010 01011111 01101100 01101001 01110011 01110100 01011011 00110000 01011101 00101001 00100000 00001010 01000010 00111101 01101001 01101110 01110100 00101000 01100101 01101110 01110100 01100101 01110010 01011111 01101100 01101001 01110011 01110100 01011011 00110001 01011101 00101001 00100000 00001010 01110000 01110010 01101001 01101110 01110100 00101000 01100111 01100011 01100100 00101000 01000001 00101100 01000010 00101001 00101001
 
Регистрация
23 Дек 2013
Сообщения
78
Репутация
0
Спасибо
0
Монет
0
Единственный способ упростить-перейти на джаву
 
Регистрация
30 Дек 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Ваш код уже вполне функционален, но можно внести несколько оптимизаций, чтобы снизить время работы:

Используйте алгоритм Евклида для нахождения НОД:
Вместо последовательного вычитания можно использовать алгоритм Евклида для нахождения наибольшего общего делителя (НОД) чисел 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.
 
Регистрация
4 Июл 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
def gcd(a,b):
if b==0:
return a
else:
return gcd(b, a % b)

enter_list = input().split()
A=int(enter_list[0])
B=int(enter_list[1])
print(gcd(A,B))
 
Регистрация
25 Авг 2023
Сообщения
5
Репутация
0
Спасибо
0
Монет
0
Сверху Снизу