На вход программы поступает последовательность из натуральных чисел, все числа в последовательности различны. Рассматриваются всевозможные непустые подмножества, состоящие из элементов последовательности. Необходимо найти количество подмножеств, в которых произведение элементов кратно
и некратно
.
Пример входных данных:
Первая строка входного файла содержит число – общее количество чисел в наборе. Каждая из следующих
строк содержит натуральные числа, не превышающих
.
Пример входного файла:
Для указанных данных ответом будет являться .
Решение 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))