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

Регистрация
28 Июн 2013
Сообщения
74
Репутация
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)
 
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
 
Единственный способ упростить-перейти на джаву
 
Ваш код уже вполне функционален, но можно внести несколько оптимизаций, чтобы снизить время работы:

Используйте алгоритм Евклида для нахождения НОД:
Вместо последовательного вычитания можно использовать алгоритм Евклида для нахождения наибольшего общего делителя (НОД) чисел 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.
 
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))
 
Назад
Сверху