Дана последовательность натуральных чисел. Назовём парой любые два числа из последовательности. Необходимо определить количество пар, в которых сумма чисел в паре делится без остатка на 4, а их произведение на 6561.
Первая строка входного файла содержит целое число N — общее количество чисел в наборе. Каждая из следующих N строк содержит одно число, не превышающее 100 000. Гарантируется, что число в ответе не превышает 2 · 109.
Вам даны два входных файла (A и B), каждый из которых имеет описанную выше структуру. В ответе укажите два числа: сначала искомое количество пар для файла A, затем — для файла B.
Ответ:
Решение. Приведем решение на языке Python для файла A.
f = [int(i) for i in open('27-A.txt')]
k = 0
for x in range(1, len(f)):
for y in range(x+1, len(f)):
if not (f[x] + f[y]) % 4 and not (f[x] * f[y]) % 6561:
k += 1
print(k)
Приведем решение на языке Python для файла В.
f = [int(i) for i in open('27-B.txt')]
li, F = [[0]*9 for _ in range(4)], f[1:]
k = 0
fn = lambda k, n: fn(k+1, n) if not n % (3 ** k) else k - 1
for i in range(f[0]):
four = F[i] % 4
may = fn(1, F[i])
if may > 8:
may = 8
for j in range(8 - may, 9):
k += li[(4 - four) % 4][j]
li[four][may] += 1
print(k)
Ответ: 306 360950279.
Приведем решение Юрия Красильникова на языке Python.