Задание 27 ЕГЭ по информатике · 8180D7

Программа и описание алгоритмаВысокаяКЭС 3.2КЭС 3.3
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять рядом, порядок элементов в паре не важен. Необходимо определить количество пар, для которых произведение элементов делится на 6.
В первой строке входных данных задаётся количество чисел N (1≤N≤1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.
Программа должна вывести одно число — количество пар, в которых произведение элементов кратно 6.
Пример входных данных:
4
2
10
3
15
Пример выходных данных: 4.
Из четырёх заданных чисел можно составить 6 попарных произведений. На 6 делятся произведения 2⋅3, 2⋅15, 10⋅3 и 10⋅15.
Требуется написать эффективную по времени и по памяти программу. Программа считается эффективной по времени, если при увеличении N в k раз время её работы увеличивается не более чем в k раз. Программа считается эффективной по памяти, если память для хранения всех переменных не превышает 1 килобайта и не увеличивается с ростом N.
Перед текстом программы необходимо кратко описать алгоритм решения и указать использованный язык программирования и его версию.

Развёрнутый ответ: проверяется по критериям ФИПИ.

Подсказки (3)
  1. Чтобы произведение делилось на 6, оно должно делиться одновременно на 2 и на 3. Какие свойства каждого числа достаточно запомнить?
  2. Для каждого числа определите два признака: делится ли оно на 2 и делится ли оно на 3. Получаются четыре типа чисел. При чтении очередного числа посчитайте подходящие ранее встреченные типы.
  3. Храните четыре счётчика типов: (0,0), (0,1), (1,0) и (1,1), где первый признак — делимость на 2, второй — на 3. Для нового числа переберите четыре типа ранее встреченных чисел и добавьте их количество, если вместе они дают делимость произведения на 2 и на 3.
Решение
1. Для каждого числа достаточно знать два булевых признака: делится ли оно на 2 и делится ли оно на 3. Это определяет один из четырёх типов числа.

2. Произведение двух чисел делится на 6, если среди двух чисел есть хотя бы один множитель 2 и хотя бы один множитель 3. Поэтому для очередного числа можно добавить к ответу количество уже обработанных чисел совместимых с его типом.

3. После подсчёта подходящих предыдущих чисел увеличить счётчик типа текущего числа. Так каждая пара учитывается ровно один раз — в момент обработки второго элемента пары.
O(N) по времени и O(1) по дополнительной памяти

4. Эталонная реализация на Python 3.11:

5. from sys import stdin n = int(stdin.readline()) cnt = [[0, 0], [0, 0]] answer = 0 for _ in range(n):
x = int(stdin.readline()) d2 = int(x % 2 == 0) d3 = int(x % 3 == 0) for p2 in range(2):
for p3 in range(2):
if (d2 or p2) and (d3 or p3):
answer += cnt[p2][p3] cnt[d2][d3] += 1 print(answer)
Частые ошибки
  • Перебирать все пары, получая сложность $O(N^2)$.
  • Проверять только делимость на $2$ или только делимость на $3$, забывая о необходимости одновременной делимости на оба множителя.
  • Увеличивать счётчик типа до подсчёта пар, из-за чего число может образовать пару само с собой.
  • Хранить всю последовательность, хотя для решения достаточно четырёх счётчиков.
  • Использовать обычный целочисленный тип с недостаточным диапазоном для ответа: максимально возможное число пар равно $\frac{N(N-1)}{2}$.

Источник: Открытый банк ФИПИ

Похожие задания

27Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 5D03DA27Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 5…Программа и описание алгоритма · 6A655827На вход программе подаются сведения о сдаче экзаменов учениками 9-х классов некоторой средней школы. В первой…Программа и описание алгоритма · 6FF64727Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 7BD73827Дана последовательность N целых положительных чисел. Рассматриваются все пары элементов последовательности…Программа и описание алгоритма · 8F133027Рассматриваются все пары различных элементов последовательности: элементы пары не обязаны стоять в…Программа и описание алгоритма · 902B8427Рассматриваются все пары различных элементов последовательности: порядок элементов в паре не важен.…Программа и описание алгоритма · BCE6F127На вход программе подаются строчные английские буквы. Ввод этих символов заканчивается точкой (другие…Программа и описание алгоритма · C04179

Нужен репетитор по информатике?

Посмотрите репетиторов, которые ведут занятия в Precettore, или оставьте заявку — подберём сами.

Репетиторы по информатике

Подбор репетитора

Напишите, что нужно, — команда Precettore подберёт репетитора и свяжется с вами.

Готовьтесь к ЕГЭ по информатике в Precettore

Варианты с автопроверкой, домашние задания от репетитора, онлайн-доска и разбор ошибок — в одном кабинете. Регистрация бесплатная.