Дана последовательность натуральных чисел. Назовём парой любые два числа из последовательности. Необходимо определить количество пар, в которых сумма чисел в паре делится без остатка
Входные данные.
Первая строка входного файла содержит целое число 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])%4==0 and (numbers[i]*numbers[h])%59049==0:
k=k+1
i=i+1
print(k)
Ответ: 22 и 44 211 393.
Примечание.
Путь к файлу необходимо указать согласно расположению файла на Вашем компьютере.
Приведём другое решение на языке Python.
def divideOnTwo(x):
count = 0
while x % 3 == 0:
count += 1
x = x // 3
if count > 10:
count = 10
return count
with open('27-B.txt') as file:
n = int(file.readline())
l = [int(s) for s in file]
d = [[0] * 11 for i in range(4)]
count = 0
result = 0
for i in range(0, n):
for j in range(10 - divideOnTwo(l[i]), 10 + 1):
result += d[(4 - l[i] % 4) % 4][j]
d[l[i] % 4][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 = 3,10,4 # 590149 = 3**10, sp - сумма пары
t = [[0]*(maxpwr+1) for _ in range(sp)]
a = [int(s) for s in open('27.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)

