На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар чисел, произведение которых кратно 7, а сумма нечётна.
В ответе укажите два числа: сначала значение для файла А, затем через пробел значение для файла B.
Переборное решение:
f = open(’15_A.txt’)
n = int(f.readline())
nums = [int(i) for i in f]
cnt = 0
for i in range(n):
for j in range(i + 1, n):
if (nums[i] + nums[j]) % 2 != 0 and nums[i] * nums[j] % 7 == 0:
cnt += 1
print(cnt)
Эффективное решение:
f = open(’15_B.txt’)
k = 2 # Остаток от деления на что должен быть 1
p = 7 # Чему должно быть кратно произведение
n = int(f.readline())
# Список количеств чисел, где первый индекс - кратность p (0 - не кратно, 1 - кратно),
# а второй индекс - остаток от деления на k
nums = [[0] * k for _ in range(2)]
cnt = 0
for i in range(n):
x = int(f.readline())
# Чтобы сумма была нечетной, четность элементов должна быть разной
ost = int(not (x % 2))
# Если x кратен p, к нему в пару можно ставить как кратные p, так и не кратные p числа
if x % p == 0:
cnt += nums[0][ost] + nums[1][ost]
nums[1][x % k] += 1
# Если x не кратен p, к нему в пару можно ставить только кратные p числа
else:
cnt += nums[1][ost]
nums[0][x % k] += 1
print(cnt)