Дана последовательность натуральных чисел. Назовём парой любые два числа из последовательности. Необходимо определить количество пар, в которых сумма чисел в паре делится без остатка
Входные данные.
Первая строка входного файла содержит целое число N — общее количество чисел в наборе. Каждая из следующих
Вам даны два входных файла
Ответ:
Приведём решение на языке Python.
f = open("27-A.txt")
n=int(f.readline())
numbers=[int(x) for x in f]
i=0
k=0
while i!=n:
for h in range(i+1,n):
if (numbers[i]+numbers[h])%3==0 and (numbers[i]*numbers[h])%4096==0:
k=k+1
i=i+1
print(k)
Ответ: 80 и 572 809 515.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Коноваленко Игоря на языке Python.
def divideOnTwo(x):
count = 0
while x % 2 == 0:
count += 1
x = x // 2
if count > 12:
count = 12
return count
with open('27-B.txt') as file:
n = int(file.readline())
l = [int(s) for s in file]
d = [[0] * 13 for i in range(3)]
count = 0
result = 0
for i in range(0, n):
for j in range(12 - divideOnTwo(l[i]), 12 + 1):
result += d[(3 - l[i] % 3) % 3][j]
d[l[i] % 3][divideOnTwo(l[i])] += 1
print(result)
Приведём решение Юрия Красильникова на языке Python.
def pwr(n,base):
return 0 if n%base else 1 + pwr(n//base,base)
k = 0
base,maxpwr,sp = 2,12,3 # 4096 = 2**12, sp - сумма пары
t = [[0]*(maxpwr+1) for _ in range(sp)]
a = [int(s) for s in open('27-A.txt')][1:]
for x in a:
r = x % sp
p = min(pwr(x,base),maxpwr)
k += sum(t[(sp - r)%sp][maxpwr - p:])
t[r][p] += 1
print(k)

