27.07 Прочие прототипы
Ошибка.
Попробуйте повторить позже
На вход программы поступает последовательность из натуральных чисел, все числа в последовательности различны.
Рассматриваются всевозможные непустые подмножества, состоящие из элементов последовательности. Необходимо найти
количество подмножеств, в которых произведение элементов кратно
и некратно
.
Пример входных данных:
Первая строка входного файла содержит число – общее количество чисел в наборе. Каждая из следующих
строк содержит натуральные числа, не превышающих
.
Пример входного файла:
Для указанных данных ответом будет являться .
Решение 1
f = open(’27.txt’) n = int(f.readline()) k = 8 ans = [0]*k for i in range(n): x = int(f.readline()) ans_new = ans[:] #Аналог ans.copy() #Подсчет ответа для уже существующих подмножеств for j in range(k): ans_new[(j*x) % k] += ans[j] #Составление нового множества из одного числа x ans_new[x % k] += 1 #Сохранение нового количества множеств ans = ans_new[:] print(ans[4])
Решение 2
def dels(k): a = [] for i in range(1, int(k**0.5)+1): if k % i == 0: a.append(i) if i != k // i: a.append(k // i) return sorted(a)[::-1] def sol(k, data): ans = [0] * (k + 1) dels_of_k = dels(k) for i in range(n): x = data[i] ans_new = ans[:] # Аналог ans.copy() # Подсчет ответа для уже существующих подмножеств for j in dels_of_k: for q in dels_of_k: if j * x % q == 0: ans_new[q] += ans[j] break # Составление нового множества из одного числа x for j in dels_of_k: if x % j == 0: ans_new[j] += 1 break # Сохранение нового количества множеств ans = ans_new[:] return ans[k] f = open(’1.txt’) n = int(f.readline()) data = [int(f.readline()) for i in range(n)] print(sol(4, data) - sol(8, data))
Решение 3
def dels(k): a = [] for i in range(1, int(k**0.5)+1): if k % i == 0: a.append(i) if i != k // i: a.append(k // i) return sorted(a)[::-1] def sol(k, data): ans = [0] * (k + 1) dels_of_k = dels(k) for i in range(n): x = data[i] ans_new = ans[:] # Аналог ans.copy() # Подсчет ответа для уже существующих подмножеств for j in dels_of_k: for q in dels_of_k: if j * x % q == 0: ans_new[q] += ans[j] break # Составление нового множества из одного числа x for j in dels_of_k: if x % j == 0: ans_new[j] += 1 break # Сохранение нового количества множеств ans = ans_new[:] return ans[4] f = open(’27A.txt’) n = int(f.readline()) data = [int(f.readline()) for i in range(n)] print(sol(8, data))
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!