Задача 'Кинотеатр'. Помогите с оптимизацией пожалуйста
Марья Ивановна с Марьей Михайловной привели школьников в кинотеатр. Чтобы не было никаких обид, Марья Ивановна построила всех школьников по алфавиту и рассадила их: сначала в первый ряд слева направо, затем во второй слева направо и так далее, заполнив весь зал из n рядов по m кресел. Тут пришла Марья Михайловна и сказала, что ребята сели неправильно — надо пересесть. Она предложила сначала заполнить все первые места от первого ряда к последнему, затем все вторые места и так далее.
Определите, сколько школьников после такой пересадки останется на своем месте.
Например, если n=3 и m=3, то в первом случае дети сядут так:1 2 3
4 5 6
7 8 9Во втором же случае дети сядут так:
1 4 7
2 5 8
3 6 9Таким образом, три школьника: 1, 5 и 9 останутся на своих местах.
Мой код:
from itertools import count as count_from
a,b=map(int,input().split())
count_1=0
count = count_from(1)
matrix = [[next(count) for _ in range(a)] for _ in range(b)]
matrix1 = [[0 for j in range(a)] for i in range(b)]
count = count_from(1)
for l in range(a):
for h in range(b):
matrix1[h][l]=next(count)
for k in range(a):
for g in range(b):
if matrix[g][k]==matrix1[g][k]:
count_1+=1
print(count_1)
Но он выполняется слишком долго. Помогите пожалуйста оптимизировать его.
Ответы (1 шт):
Не знаю есть ли для такой задачи формула, но перебором это однозначно делается за за один "проход":
n = int(input("Рядов? "))
m = int(input("Кресел в ряду? "))
c = len([1 for ni in range(n) for mi in range(m) if ni*m+mi == mi*n+ni])
print(c)