Дана последовательность натуральных чисел. Назовём парой любые два числа из последовательности. Необходимо определить количество пар, в которых сумма чисел в паре делится без остатка
Входные данные.
Первая строка входного файла содержит целое
Вам даны два входных файла
Ответ:
Приведём решение на языке 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])%1024==0:
k=k+1
i=i+1
print(k)
Ответ: 529 и 2 005 090 253.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём решение Фефелова Сергея на языке Python.
f = open("27.txt")
n=int(f.readline())
a = [[0]*11 for i in range(3)]
for i in range(n):
x=int(f.readline())
j=x%3
k=0
while x%2 == 0:
k += 1
x //= 2
if k == 10: break
a[j][k] += 1
k=sum(a[0][i]*(a[0][i]-1)//2 for i in range(5,11))
k+=sum(a[0][i]*a[0][j] for i in range(11) for j in range(max(i+1,10-i),11))
k+=sum(a[1][i]*a[2][j] for i in range(11) for j in range(10-i,11))
print(k)
Приведём решение Юрия Красильникова на языке Python.
def pwr(n,base):
return 0 if n%base else 1 + pwr(n//base,base)
k = 0
base,maxpwr,sp = 2,10,3 # 1024 = 2**10, sp - сумма пары
t = [[0]*(maxpwr+1) for _ in range(sp)]
a = [int(s) for s in open('27-B.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)

