


Информатика, ЕГЭ, задание 27.
На вход программы поступает последовательность из N целых положительных чисел. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов делится на 26.
В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 60000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000. В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов кратно 26.
Произведение двух чисел делится на 26, если выполнено одно из следующих условий (условия не могут выполняться одновременно).
А. Оба сомножителя делятся на 26.
Б. Один из сомножителей делится на 26, а другой не делится.
В. Ни один из сомножителей не делится на 26, но один сомножитель делится на 2, а другой — на 13.
Примечание для проверяющего. Условие делимости произведения на 26 можно сформулировать проще, например, так: (один из сомножителей делится на 26) ИЛИ (один сомножитель делится на 2, а другой — на 13). Но в этом случае пара сомножителей может удовлетворять обоим условиям, что затруднит подсчёт количества пар.
При вводе чисел можно определять, делится ли каждое из них на 26, 2 и 13, и подсчитывать следующие значения:
1) n26 — количество чисел, кратных 26;
2) n13 — количество чисел, кратных 13, но не кратных 26;
3) n2 — количество чисел, кратных 2, но не кратных 26.
Примечание для проверяющего. Сами числа при этом можно не хранить. Каждое число учитывается не более чем в одном из счётчиков. Количество пар, удовлетворяющих условию А, можно вычислить по формуле n26·(n26 – 1)/2.
Количество пар, удовлетворяющих условию Б, можно вычислить по формуле n26·(N – n26).
Количество пар, удовлетворяющих условию В, можно вычислить по формуле n2·n13.
Поэтому искомое количество пар вычисляется по формуле n26·(n26 – 1)/2 + n26·(N – n26) + n2·n13.
Как мы пришли к этим формулам? Почему мы количество каких-то чисел умножаем на количество других чисел? Откуда взялись формулы для А, Б, В? Кто может объяснить?
f = open("27989_B.txt") # для файла A укажите его название
s = f.readlines()
n = int(s[0])
k = 0
k_0 = 0
k_26 = 0
k_2 = 0
k_13 = 0
for i in range(1, n + 1):
s[i] = int(s[i])
if s[i] % 26 == 0:
k_26 += 1
elif s[i] % 13 == 0:
k_13 += 1
elif s[i] % 2 == 0:
k_2 += 1
else:
k_0 += 1
k = k_26 * k_0 + k_13 * k_2 + k_26 * k_13 + k_26 * k_2 + (k_26 * (k_26 - 1)) // 2
print(k)
Данная программа решает задачу подсчета количества пар, для которых произведение элементов делится на 26.
Программа открывает файл "27989_B.txt" и считывает его содержимое в список строк s. Первая строка файла содержит количество чисел N. Затем в каждой из последующих N строк записано одно целое положительное число.
Далее инициализируются переменные k, k_0, k_26, k_2, k_13, которые будут использоваться для подсчета количества чисел, кратных 26, 2, 13 и не кратных ни одному из них.
Затем происходит цикл, который проходит по всем элементам последовательности. В каждой итерации проверяется деление элемента на 26, 13 и 2. Если элемент делится на 26, увеличивается значение k_26. Если элемент делится на 13, увеличивается значение k_13. Если элемент делится на 2, увеличивается значение k_2. Если элемент не делится ни на одно из чисел, увеличивается значение k_0.
После окончания цикла, программа вычисляет искомое количество пар, используя формулу k = k_26 * k_0 + k_13 * k_2 + k_26 * k_13 + k_26 * k_2 + (k_26 * (k_26 - 1)) // 2. Эта формула соответствует вычислению количества пар, удовлетворяющих условиям задачи.
Наконец, программа выводит полученное значение k.
Важно отметить, что данная программа решает задачу для файла "27989_B.txt". Если необходимо решить задачу для другого файла, необходимо заменить название файла в строке f = open("27989_B.txt") на соответствующее название.