Тема (старое) 27. Программирование

06 Макс/мин, кол-во пар, произведение кратно/не кратно

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела (старое) 27. программирование
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 21#29241Максимум баллов за задание: 2

Дана последовательность из N  целых положительных чисел. Необходимо определить максимальное произведение пары элементов этой последовательности, произведение которой кратно 6  .

В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 10000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.

В ответе укажите искомое произведение сначала для файла A, затем, через пробел, для файла B.

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 6 == 0:
            ans = max(ans, a[i] * a[j])

print(ans)

Решение 2 (эффективное)

f = open(’2.txt’)
n = int(f.readline())
mx = 0
mx2 = 0
mx3 = 0
mx6 = 0
# пары (1, 6), (2, 6), (3, 6), (6, 6), (2, 3)
ans = 0
for i in range(n):
    x = int(f.readline())
    if x % 6 == 0:
        ans = max(mx6 * x, mx3 * x, mx2 * x, mx * x, ans)
        mx6 = max(mx6, x)
    elif x % 3 == 0:
        ans = max(mx6 * x, mx2 * x, ans)
        mx3 = max(mx3, x)
    elif x % 2 == 0:
        ans = max(mx6 * x, mx3 * x, ans)
        mx2 = max(mx2, x)
    else:
        ans = max(mx6 * x, ans)
        mx = max(mx, x)
print(ans)

Решение 3 (эффективное)

f = open(’2.txt’)
n = int(f.readline())
a = [0] * 7
ans = 0
for i in range(n):
    # следующие циклы можно обернуть в генераторы
    x = int(f.readline())
    for j in range(1, 7):
        if x * j % 6 == 0: # идея как в первом решении, но используем цикл
            ans = max(ans, x * a[j])
    for j in range(6, 0, - 1):
        if x % j == 0 and 6 % j == 0:
            a[j] = max(a[j], x)
            break
print(ans)

Ответ: 2014740 999000

Ошибка.
Попробуйте повторить позже

Задача 22#29977Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить минимальное произведение среди пар элементов, которое будет кратно 15  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 10000)  . В каждой из последующих  N  строк записано одно целое положительное число, не превышающее 10  000  .

Пример входных данных:

5

3

4

10

26

17

Выходные данные для приведённого выше примера: 30

В ответе укажите два числа: сначала значение искомого количества для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 10000000000
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 15 == 0:
            ans = min(ans, a[i] * a[j])
print(ans)

Решение 2 (эффективное)

n = int(input())
kr_15 = [100000000, 100000000]
kr_5, kr_3, nekr = 100000000, 100000000, 100000000

for i in range(n):
    x = int(input())

    if x % 15 == 0:
        kr_15 += [x]
    elif x % 5 == 0:
        kr_5 = min(kr_5, x)
    elif x % 3 == 0:
        kr_3 = min(kr_3, x)
    else:
        nekr = min(nekr, x)

kr_15 = sorted(kr_15)[:2]
print(min(kr_15[0]*kr_15[1], kr_15[0]*kr_5, \
          kr_15[0]*kr_3, kr_15[0]*nekr,\
          kr_5*kr_3))

Ответ: 750 30

Ошибка.
Попробуйте повторить позже

Задача 23#29978Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар, произведение которых не будет кратно 144  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 10000)  . В каждой из последующих  N  строк записано одно целое положительное число, не превышающее 10  000  .

Пример входных данных:

5

12

12

12

11

13

Выходные данные для приведённого выше примера: 7

В ответе укажите два числа: сначала значение искомого количества для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение

Решение 1 (неэффективное)

f = open("27A.txt")
n = int(f.readline())
a = [int(f.readline()) for x in range(n)]
ans = 0
for i in range(n):
    for j in range(i + 1, n):
        if (a[i] * a[j]) % 144 != 0:
            ans += 1
print(ans)

Решение 2 (эффективное)

def dels(x):
    ans = []
    for i in range(1, x+1):
        if x % i == 0:
            ans += [i]
    return ans

a = dels(144)[::-1]
mask = [0]*145

n = int(input())

for i in range(n):
    x = int(input())
    for j in a:
        if x % j == 0:
            mask[j] += 1
            break

ans = 0
for i in range(len(a)):
    for j in range(i+1, len(a)):
        if a[i]*a[j] % 144 != 0:
            ans += mask[a[i]]*mask[a[j]]

for i in range(len(a)):
    if a[i]**2 % 144 != 0:
        ans += mask[a[i]]*(mask[a[i]]-1) // 2

print(ans)

Ответ: 190 11846101

Ошибка.
Попробуйте повторить позже

Задача 24#32957Максимум баллов за задание: 2

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество таких пар, произведение которых кратно 34  .

В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 10000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.

Пример входных данных:

5

2

22

1

17

10

Выходные данные для приведённого выше примера: 3

В ответе укажите два числа: сначала значение искомого количества для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Решение №1.

f = open(’1.txt’)
n = int(f.readline())
a = [0] * 35 # для удобства используем массив на 35 элементов
# будем использовать только ячейки 1, 2, 17, 34
# пары (1, 34), (2, 34), (17, 34), (34, 34), (2, 17)
ans = 0
for i in range(n):
    x = int(f.readline())
    if x % 34 == 0:
        ans += a[34] + a[17] + a[2] + a[1]
        a[34] += 1
    elif x % 17 == 0:
        ans += a[34] + a[2]
        a[17] += 1
    elif x % 2 == 0:
        ans += a[34] + a[17]
        a[2] += 1
    else:
        ans += a[34]
        a[1] += 1
print(ans)

Решение №2.

f = open(’1.txt’)
n = int(f.readline())
a = [0] * 35
ans = 0
for i in range(n):
# следующие циклы можно обернуть в генераторы
    x = int(f.readline())
    for j in range(1, 35):
        if x * j % 34 == 0: # идея как в первом решении, но используем цикл
            ans += a[j]
    for j in range(34, 0, - 1):
        if x % j == 0 and 34 % j == 0:
            a[j] += 1
            break
print(ans)

Ответ: 11 1088680

Ошибка.
Попробуйте повторить позже

Задача 25#35949Максимум баллов за задание: 2

Имеется набор данных из N целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить минимальное произведение среди пар элементов, которое будет кратно 15.

В первой строке входных данных задаётся количество чисел N (1 ≤ N ≤ 10000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.

Пример входных данных:

5

3

4

10

26

17

Выходные данные для приведённого выше примера: 30

В ответе укажите два числа через пробел: сначала значение искомого количества для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
n = int(input())
kr_15 = [100000000, 100000000]
kr_5, kr_3, nekr = 100000000, 100000000, 100000000

for i in range(n):
    x = int(input())

    if x % 15 == 0:
        kr_15 += [x] # добавляем новый элемент к массиву
    elif x % 5 == 0:
        kr_5 = min(kr_5, x)
    elif x % 3 == 0:
        kr_3 = min(kr_3, x)
    else:
        nekr = min(nekr, x)

kr_15 = sorted(kr_15) # нам нужно два минимальных кратных 15
print(min(kr_15[0]*kr_15[1], kr_15[0]*kr_5, \
          kr_15[0]*kr_3, kr_15[0]*nekr,\
          kr_5*kr_3))

Ответ: 750 30

Ошибка.
Попробуйте повторить позже

Задача 26#36765Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество таких пар, произведение которых будет кратно 13  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 1500000)  . В каждой из последующих    N  строк записано одно целое положительное число, не превышающее 10000  .

Пример входных данных:

5

13

22

1

13

10

Выходные данные для приведённого выше примера: 7

В ответе укажите через пробел два числа: сначала значение искомого количества для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open("fileA.txt")
n = int(f.readline())
a = [int(x) for x in f.readlines()]
kr13 = 0
nekr13 = 0
for i in range(n):
    if a[i] % 13 == 0:
        kr13 += 1
    else:
        nekr13 += 1
ans = kr13 * nekr13 + kr13 * (kr13 - 1) // 2
print(ans)
f.close()

Ответ: 1380 166592277705

Ошибка.
Попробуйте повторить позже

Задача 27#36768Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество таких пар, произведение которых будет кратно 22  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 1500000)  . В каждой из последующих    N  строк записано одно целое положительное число, не превышающее 10000  .

Пример входных данных:

5

11

22

1

7

68

Выходные данные для приведённого выше примера: 5

В ответе укажите через пробел два числа: сначала значение искомого количества для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
f = open("fileA.txt")
n = int(f.readline())
a = [int(x) for x in f.readlines()]
kr2 = 0
kr11 = 0
kr22 = 0
for i in range(n):
    if a[i] % 22 == 0:
        kr22 += 1
    elif a[i] % 11 == 0:
        kr11 += 1
    elif a[i] % 2 == 0:
        kr2 += 1
ans = kr22 * (n - kr22) + kr11 * kr2 + kr22 * (kr22 - 1) // 2
print(ans)
f.close()

Ответ: 531 145982121354

Ошибка.
Попробуйте повторить позже

Задача 28#37438Максимум баллов за задание: 2

В файле 7.txt имеется последовательность натуральных чисел. Найдите количество пар элементов последовательности, произведение которых кратно 71 и равно произведению элементов какой-либо другой пары (в которой отличается индекс хотя бы одного из элементов, образующих пару).

Под парой в данной задаче подразумевается два различных элемента последовательности.

В первой строке файла содержится число N (10 ≤ N ≤ 100  ), каждая из следующих N строк файла содержит одно натуральное число, не превышающее 10000.

Пример входного файла:

6

2

5

4

2

4

71

Для указанных входных данных ответом является число 4.

Пояснение: В этом наборе можно выбрать две пары (71 и 2), и две пары (71 и 4). Пара (71 и 5) не подходит, потому что нет другой пары, произведение элементов которой равно 71*5. Ответ: 4.

Вложения к задаче
Показать ответ и решение

Решение программой

Для решения задачи сначала нужно перебрать все пары чисел из последовательности и запомнить их произведения. Затем среди них ищем такие пары, у которых произведение кратно 71 и у этого произведения есть хотя бы один “дубликат” — то есть такое же значение произведения, но от другой пары (где индексы хотя бы одного числа другие). Под «парой» подразумеваются два разных элемента последовательности.

Программа сначала читает данные и сохраняет все возможные произведения пар чисел в список p. Далее повторно перебираются все пары и проверяется: кратно ли их произведение 71 и встречается ли оно в списке хотя бы дважды (то есть, есть ли совпадение с другой парой). Если да, счётчик увеличивается.

# Открываем файл и считываем количество чисел
f = open("7.txt")
n = int(f.readline())

# Считываем сами числа
a = [int(i) for i in f]
# Счётчик подходящих пар
count = 0
# Массив для хранения всех произведений пар
p = []

# Сначала собираем все возможные произведения пар i < j
for i in range(n):
    for j in range(i + 1, n):
        p.append(a[i] * a[j])

# Снова перебираем все пары
for i in range(n):
    for j in range(i + 1, n):
        # Условие: произведение кратно 71 и встречается в списке хотя бы дважды
        if (a[i] * a[j]) % 71 == 0 and p.count(a[i] * a[j]) > 1:
            count += 1

print(count)

Ответ: 8

Ошибка.
Попробуйте повторить позже

Задача 29#40791Максимум баллов за задание: 2

В текстовом файле записан набор натуральных чисел, не превышающих 108  . Гарантируется, что все числа различны. Из набора нужно выбрать три числа, произведение которых делится на 5  . Сколько троек, подходящих под условие задачи можно найти?

Первая строка входного файла содержит натуральное число N  — общее количество чисел в файле. Каждая из следующих N  строк содержит одно число.

Пример входного файла:

4

5

8

14

11

Для данного примера в ответе нужно записать 3  (подходят следующие тройки (5,8,14  ), (5,8,11  ), (5,11,14  )).

Вам даны два входных файла, каждый из которых имеет описанную выше структуру. В ответе укажите два числа, ответ для файла A  и для файла B  .

Вложения к задаче
Показать ответ и решение

Решение 1. Неэффективное

f = open("27-A.txt")
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
k = 0
for i in range(n):
    for j in range(i + 1, n):
        for l in range(j + 1, n):
            if (a[i] * a[j] * a[l]) % 5 == 0:
                k += 1
print(k)

Решение 2. Эффективное. Динамика

f = open("27-A.txt")
n = int(f.readline())
numbers = [0] * 6
pairs = [0] * 6
ans = 0

for i in range(n):
    x = int(f.readline())

    for j in range(1, 6):
        if 5 % j == 0:
            if x * j % 5 == 0:
                ans += pairs[j]

    for j in range(5, 0, -1):
        for k in range(5, 0, -1):
            if x * j % k == 0 and 5 % j == 0 and 5 % k == 0:
                pairs[k] += numbers[j]
                break

    for j in range(5, 0, -1):
        if x % j == 0 and 5 % j == 0:
            numbers[j] += 1
            break

print(ans)

Решение 3. Эффективное. Статика

f = open("27-B.txt")
n = int(f.readline())
kr5 = 0
for i in range(n):
    x = int(f.readline())
    kr5 += (x % 5 == 0)

nekr = n - kr5

ans = (kr5 * nekr * (nekr - 1) // 2 +
        nekr * kr5 * (kr5 - 1) // 2 +
        kr5 * (kr5 - 1) * (kr5 - 2) // 6)

print(ans)

Ответ: 3896 81078489940921

Ошибка.
Попробуйте повторить позже

Задача 30#40792Максимум баллов за задание: 2

В текстовом файле записан набор натуральных чисел, не превышающих 108  . Гарантируется, что все числа различны. Из набора нужно выбрать три числа, произведение которых делится на 8  . Сколько троек, подходящих под условие задачи можно найти?

Первая строка входного файла содержит натуральное число N  — общее количество чисел в файле. Каждая из следующих N  строк содержит одно число.

Пример входного файла:

4

5

8

14

11

Для данного примера в ответе нужно записать 3  (подходят следующие тройки (5,8,14  ), (5,8,11  ), (8,11,14  )).

Вам даны два входных файла, каждый из которых имеет описанную выше структуру. В ответе укажите два числа, ответ для файла A  и для файла B  .

Вложения к задаче
Показать ответ и решение

Решение 1. Неэффективное

f = open("27-A.txt")
n = int(f.readline())
a = []
for i in range(n):
    a.append(int(f.readline()))
k = 0
for i in range(n):
    for j in range(i + 1, n):
        for l in range(j + 1, n):
            if (a[i] * a[j] * a[l]) % 8 == 0:
                k += 1
print(k)

Решение 2. Эффективное. Динамика

f = open("27-B.txt")
n = int(f.readline())
numbers = [0] * 9
pairs = [0] * 9
ans = 0

for i in range(n):
    x = int(f.readline())

    for j in range(1, 9):
        if 8 % j == 0:
            if x * j % 8 == 0:
                ans += pairs[j]

    for j in range(8, 0, -1):
        for k in range(8, 0, -1):
            if x * j % k == 0 and 8 % j == 0 and 8 % k == 0:
                pairs[k] += numbers[j]
                break

    for j in range(8, 0, -1):
        if x % j == 0 and 8 % j == 0:
            numbers[j] += 1
            break

print(ans)

Ответ: 5626 83607121825139

Ошибка.
Попробуйте повторить позже

Задача 31#45078Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар, произведение которых не будет кратно 8  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 100000)  . В каждой из последующих   N  строк записано одно целое положительное число, не превышающее 10000  .

Пример входных данных:

5

12

12

12

11

13

Выходные данные для приведённого выше примера: 7

В ответе укажите два числа: сначала значение искомого количества для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение
f = open(’27B.txt’)
n = int(f.readline())
ans = 0
kr = [0]*9

for i in range(n):
    x = int(f.readline())
    for j in [8, 4, 2, 1]:
        if x * j % 8 != 0:
            ans += kr[j]

    for j in [8, 4, 2, 1]:
        if x % j == 0:
            kr[j] += 1
            break

print(ans)

Ответ: 158 2848871250

Ошибка.
Попробуйте повторить позже

Задача 32#45079Максимум баллов за задание: 2

Имеется набор данных из N  целых чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар, произведение которых не будет кратно 30  .

В первой строке входных данных задаётся количество чисел N  (1 ≤ N ≤ 100000)  . В каждой из последующих   N  строк записано одно целое положительное число, не превышающее 10000  .

Пример входных данных:

5

12

12

12

30

13

Выходные данные для приведённого выше примера: 6

В ответе укажите два числа: сначала значение искомого количества для файла A  , затем для файла B  .

Вложения к задаче
Показать ответ и решение
f = open(’27B.txt’)
n = int(f.readline())
ans = 0
kr = [0]*31

for i in range(n):
    x = int(f.readline())
    for j in [30, 15, 10, 6, 5, 3, 2, 1]:
        if x * j % 30 != 0:
            ans += kr[j]

    for j in [30, 15, 10, 6, 5, 3, 2, 1]:
        if x % j == 0:
            kr[j] += 1
            break

print(ans)

Ответ: 149 3535831350

Ошибка.
Попробуйте повторить позже

Задача 33#56890Максимум баллов за задание: 2

Дано число N  затем N  натуральных чисел. Найти количество троек чисел, где элементы будут представлять собой строго возрастающую геометрическую прогрессию. Знаменатель геометрической прогрессии – натуральное число большее 1  .

Входные данные

В первой строке подается натуральное число 1 < N < 100000  . В каждой строке после записано одно натуральное число, не превышающее 10000  .

В ответе укажите одно число: значение для файла А.

Файл Б для тех, кто уверен в своих силах. Ответ для него: 75392942

Вложения к задаче
Показать ответ и решение
n = int(input())

mask = [0] * 10001

for i in range(n):
    mask[int(input())] += 1

ans = 0
for i in range(2, 101):
    for j in range(1, 10000 + 1):
        if j * i * i > 10000:
            break

        if mask[j] * mask[j * i] * mask[j * i * i] > 0:
            ans += mask[j] * mask[j * i] * mask[j * i * i]

print(ans)

Ответ: 1

Ошибка.
Попробуйте повторить позже

Задача 34#59605Максимум баллов за задание: 2

Определите число, которое является произведением двух элементов последовательности (элементы с различными номерами), а также наибольшим кратным 34. Гарантируется, что хотя бы одно такое произведение в последовательности есть.

Пример входного файла:

Даны два входных файла (файл A и файл B), каждый из которых содержит в первой строке количество чисел N (1 ≤ N ≤ 1000000)  . В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

7

124

1000

3

170

167

954

256

Пример выходных данных для приведённого выше примера входных данных: 170000

В ответе укажите два числа через пробел: сначала значение искомого произведения для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение
27A:

f = open(’C:/27_A.txt’)
n = int(f.readline())
a = [int(i) for i in f]

mx = 0
for i in range(n):
    for j in range(i+1, n):
        if a[i]*a[j] % 34 == 0:
            mx = max(mx, a[i]*a[j])
print(mx)

27B:

f = open(’C:/27_B.txt’)
n = int(f.readline())
a = [int(i) for i in f]

mx = max(a)
mx2 = max(i for i in a if i % 2 == 0)
mx17 = max(i for i in a if i % 17 == 0)
mx34 = max(i for i in a if i % 34 == 0)

mxp = 0
if mx != mx34 or a.count(mx) > 1:
    if mx*mx34 % 34 == 0:
        mxp = max(mxp, mx*mx34)

if mx2 != mx17 or a.count(mx) > 1:
    if mx2*mx17 % 34 == 0:
        mxp = max(mxp, mx2*mx17)

if mx2 != mx34 or a.count(mx) > 1:
    if mx2*mx34 % 34 == 0:
        mxp = max(mxp, mx2*mx34)

print(mxp)

Ответ: 90489504 775744

Ошибка.
Попробуйте повторить позже

Задача 35#62842Максимум баллов за задание: 2

По каналу связи передавались данные в виде последовательности положительных целых чисел. Количество чисел заранее неизвестно, но не менее двух, признаком конца данных считается число 0. Контрольное значение равно такому максимально возможному произведению двух чисел из переданного набора, которое делится на 7, но не делится на 49. Если такое произведение получить нельзя, контрольное значение считается равным 1.

Программа должна напечатать одно число — вычисленное контрольное значение, соответствующую условиям задачи.

Даны два входных файла (файл A и файл B), каждый из которых содержит N (1 ≤ N ≤ 100000)  строк. В каждой из N строк записано одно натуральное число, не превышающее 1000. Пример организации исходных данных во входном файле:

6

7

8

9

0 Пример выходных данных для приведённого выше примера входных данных: 63

В ответе укажите два числа через пробел: сначала значение искомого произведения для файла A, затем для файла B.

Вложения к задаче
Показать ответ и решение

Решение 27А:

# Открываем файл с именем ’27_A__1va5i.txt’
with open(’27_A__1va5i.txt’) as f:
    # Читаем каждую строку файла и преобразуем ее в целое число,
    # добавляя результат в список ’data’
    data = [int(x) for x in f]

# Изначально устанавливаем максимальное произведение равным 1
max_product = 1

# Проходим через каждый элемент в списке ’data’ (кроме последнего)
for i in range(len(data) - 1):
    # Сравниваем элемент ’data[i]’ со всеми последующими элементами в списке
    for j in range(i + 1, len(data)):
        # Вычисляем произведение двух чисел
        p = data[i] * data[j]
        # Проверяем, что произведение делится на 7 (остаток от деления на 49 равен одному из чисел [7, 14, 21, 28, 35, 42]),
        # но не на 49 (то есть не равно ни одному из чисел [7, 14, 21, 28, 35, 42] при делении на 49)
        if p % 49 in [7, 14, 21, 28, 35, 42]:
            # Если это так, обновляем максимальное произведение
            max_product = max(max_product, p)

# Выводим максимальное произведение на экран
print(max_product)

Решение 27B:

Решение в статике:

f = open(’8prob/27B.txt’)
a = [int(i) for i in f]  # Считали все числа
# Если произведение двух чисел делится на 7, но не делится на 49, это значит, что ровно одно из чисел делится на 7
# Соответственно, будем искать максимальное число, кратное 7, и максимальное число, не кратное 7,
# это и будет искомым контрольным значением
m7 = 0 # Максимальное число, кратное 7
m = 0 # Максимальное число, не кратное 7
for x in a: # Перебираем все числа из последовательности
    # Ищем m7 и m
    if x % 7 == 0 and x % 49 != 0:
        m7 = max(m7, x)
    if x % 7 != 0 and x % 49 != 0:
        m = max(m, x)
print(m * m7)

Решение в динамике:

# Имя входного файла
input_file = ’27_B__1va5j.txt’

# Инициализируем максимальное произведение как 0
max_product = 0

# Константа, связанная с модульной арифметикой
modulus = 7 * 49

# Инициализация списка для хранения максимальных значений по модулю
max_mod_values = [0] * modulus

# Открываем файл для чтения данных
with open(input_file) as file:
    # Проходим по всем строкам в файле
    for line in file:
        # Преобразуем строку в число
        number = int(line)

        # Проверяем все возможные модули
        for mod_value in range(modulus):
            # Проверяем условие: mod_value - индекс, умножаемый на текущее число
            if (number * mod_value) % 7 == 0 and (number * mod_value) % 49 != 0:
                # Если произведение больше текущего максимального произведения, обновляем его
                if number * max_mod_values[mod_value] > max_product:
                    max_product = max(max_product, number * max_mod_values[mod_value])

        # Обновляем максимальное значение для данного остатка
        max_mod_values[number % modulus] = max(number, max_mod_values[number % modulus])

# Выводим максимальное произведение
print(max_product)

Ответ: 847280 994000

Ошибка.
Попробуйте повторить позже

Задача 36#63436Максимум баллов за задание: 2

Последовательность натуральных чисел характеризуется числом M — наибольшим числом, кратным 7 и являющимся произведением двух элементов последовательности с различными номерами. Гарантируется, что хотя бы одно такое произведение в последовательности есть.

Входные данные: Дан входной файл, который содержит в первой строке количество чисел N (1 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

Пример организации исходных данных во входном файле:

5

49

295

797

482

96

Пример выходных данных для приведённого выше примера входных данных: 39053

В ответе укажите два числа: значение для файла А, затем, через пробел, для файла Б. Так же можно указать ответ ТОЛЬКО для файла А.

Вложения к задаче
Показать ответ и решение

Для А

s = open(’27-7a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
mx = -1
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 7 == 0:
            mx = max(mx, arr[i]*arr[j])
print(mx)

Для Б

s = open(’27-7b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
mx_kr7, m2_kr7, mx = 0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 7 == 0 and a > mx_kr7:
        m2_kr7 = mx_kr7
        mx_kr7 = a
    elif a % 7 == 0 and a > m2_kr7:
        m2_kr7 = a
    elif a > mx:
        mx = a
res = max(mx_kr7*m2_kr7, mx_kr7*mx)
print(res)

Варианты правильных ответов:
  1. 863660
  2. 863660 994000

Ошибка.
Попробуйте повторить позже

Задача 37#63437Максимум баллов за задание: 2

На вход программы поступает последовательность из N целых положительных чисел, необходимо определить количество пар двух элементов последовательности с различными номерами, произведение которых даёт число кратное 18.

Входные данные: Дан входной файл, который содержит в первой строке количество чисел N (1 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

Пример организации исходных данных во входном файле:

4

2

8

9

27

Пример выходных данных для приведённого выше примера входных данных: 4 (это пары: 2,9; 2,27; 8,9; 8,27)

В ответе укажите два числа через пробел: сначала значение для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Для А

s = open(’27-8a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 18 == 0:
            cnt += 1
print(cnt)

Для Б статика

f = open(’1.txt’)
n = int(f.readline())
ans = 0
k18 = 0
k9 = 0
k6 = 0
k3 = 0
k2 = 0
nk = 0
for i in range(n):
    x = int(f.readline())
    if x % 18 == 0:
        ans += (k18 + nk + k9 + k6 + k3 + k2)
        k18 += 1
    elif x % 9 == 0:
        ans += (k18 + k2 + k6)
        k9 += 1
    elif x % 6 == 0:
        ans += (k18 + k3 + k9 + k6)
        k6 += 1
    elif x % 3 == 0:
        ans += (k18 + k6)
        k3 += 1
    elif x % 2 == 0:
        ans += (k18 + k9)
        k2 += 1
    else:
        ans += k18
        nk += 1
print(ans)

Для Б динаминка

with open(’27-8b.txt’) as f:
    n = int(f.readline())
    count = 0
    D = 18 # наш делитель
    k = [0]*D#массив,в котором каждый элемент- это количество чисел с определенном остатком от D
    for i in range(n):
        x = int(f.readline())
        for d in range(D):# проходимся по нашим остаткам
            if (x*d) % 18 == 0:
                count += k[d]#прибавляем к счетчику значение в списке k под индексом остатка
        k[x % D] += 1# увеличиваем определенное значение в списке,в зависимости от того,чему равен остаток x от D
    print(count)

Ответ: 892 256845232

Ошибка.
Попробуйте повторить позже

Задача 38#63443Максимум баллов за задание: 2

На вход программы поступает последовательность из N целых положительных чисел, необходимо определить количество пар двух элементов последовательности с различными номерами, произведение которых даёт число кратное 22.

Входные данные: Дан входной файл, который содержит в первой строке количество чисел N (1 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

В ответе укажите два числа через пробел: сначала значение для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Для А

s = open(’27-14a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 22 == 0:
            cnt += 1
print(cnt)

Для Б

s = open(’27-14b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
n22, n11, n2 = 0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 22 == 0:
        n22 += 1
    elif a % 11 == 0:
        n11 += 1
    elif a % 2 == 0:
        n2 += 1
k22 = n22 * (n22 - 1) // 2 + n22 * (n - n22) + n2 * n11
print(k22)

Ответ: 5682 658250095

Ошибка.
Попробуйте повторить позже

Задача 39#63444Максимум баллов за задание: 2

На вход программы поступает последовательность из N целых положительных чисел, необходимо определить количество пар двух элементов последовательности с различными номерами, произведение которых даёт число кратное 26.

Входные данные: Дан входной файл, который содержит в первой строке количество чисел N (1 ≤ N ≤ 100000). В каждой из последующих N строк записано одно натуральное число, не превышающее 1000.

В ответе укажите два числа через пробел: сначала значение для файла А, затем для файла B.

Вложения к задаче
Показать ответ и решение

Для А

s = open(’27-15a.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
cnt = 0
for i in range(n - 1):
    for j in range(i + 1, n):
        if (arr[i]*arr[j]) % 26 == 0:
            cnt += 1
print(cnt)

Для Б

s = open(’27-15b.txt’, ’r’).readlines()[1:]
arr = []
for i in range(len(s)):
    arr.append(int(s[i]))
n = len(arr)
n26, n13, n2 =0, 0, 0
for i in range(n):
    a = arr[i]
    if a % 26 == 0:
        n26 += 1
    elif a % 13 == 0:
        n13 += 1
    elif a % 2 == 0:
        n2 += 1
k26 = n26 * (n26 - 1) // 2 + n26 * (n - n26) + n2 * n13
print(k26)

Ответ: 234 322311252

Ошибка.
Попробуйте повторить позже

Задача 40#63543Максимум баллов за задание: 2

На вход программы поступает последовательность из целых положительных чисел. Рассматриваются все пары различных элементов последовательности. Необходимо определить количество пар, для которых произведение элементов делится на 29.

Входные данные Даны два входных файла: A и B, каждый из которых содержит в первой строке количество чисел N (5 < N < 100000). Каждая из следующих N строк содержит одно натуральное число, не превышающее 10000.

Пример входных данных:

7

29

2

5

6

4

1

58

Для указанных входных данных программа должна вывести число 11.

В ответе укажите два числа через пробел: сначала количество соответствующих условию пар для файла A затем для файла B.

Предупреждение: для обработки файла В не следует использовать переборный алгоритм, определяющий количество всех возможных пар, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.

Вложения к задаче
Показать ответ и решение

Статическое решение

f = open(’27B.txt’) #для ответа на A нужно подключить файл 27A.txt
n = int(f.readline())
k29 = 0
nk = 0
for i in range(n):
    x = int(f.readline())
    if x % 29 == 0:
        k29 += 1
    else:
        nk += 1
print(k29*(k29-1)//2 + k29*nk)

Динамическое решение

f = open(’27B.txt’) #для ответа на A нужно подключить файл 27A.txt
n = int(f.readline())
counter = 0
k29 = 0
nk = 0
for i in range(n):
    y = int(f.readline())
    if y % 29 == 0:
        counter += (k29 + nk)
        k29 += 1
    else:
        counter += k29
        nk += 1
print(counter)

Ответ: 90 1163531
Рулетка
Вы можете получить скидку в рулетке!