Python. Задача 8-41
На вход программы поступает последовательность из N целых положительных чисел. Известно, что все числа в последовательности различны. Необходимо составить программу, которая подсчитывает количество пар различных элементов последовательности, произведение которых делится на 51. Элементы пары не обязательно должны стоять в последовательности рядом, порядок элементов в паре не важен.
Входные данные: Дан входной файл, в первой строке которого задаётся количество чисел N (1 ⩽ N ⩽ 100000).
В каждой из последующих NN строк записано одно целое положительное число, не превышающее 10 000.
В качестве результата программа должна напечатать одно число: количество пар, в которых произведение элементов кратно 51.
Пример входных данных:
5
1
2
3
17
51
Пример выходных данных для приведённого выше примера входных данных: 5
Пояснение. Из пяти заданных чисел можно составить 10 попарных произведений:
1·2 1·3 1·17 1·51 2·3 2·17 2·51 3·17
Из них на 51 делятся 5 произведений
1·51 2·51 3·17 3·51 17·51
f = open('c:\\work\\test-8-41-1.txt')
# Считываем из первой строки количество чисел
N = int(f.readline())
# счетчик чисел кратных 3
m3 = 0
# счетчик чисел кратных 17
m17 = 0
# счетчик чисел кратных 51
m51 = 0
# счетчик произведений кратных 51
cnt = 0
# Считываем первое число из файла
x = int(f.readline())
# Для следующих чисел из файла
for i in range(1, N):
if x % 51 == 0:
m51 += 1
if x % 17 == 0:
m17 += 1
if x % 3 == 0:
m3 += 1
# Считываем очередное число
x = int(f.readline())
if x % 51 == 0:
# Все предыдущие числа будут составлять пары с текущим
cnt += i
elif x % 17 == 0:
# Все предыдущие кратные 3 числа будут составлять пары с текущим
cnt += m3
elif x % 3 == 0:
# Все предыдущие кратные 17 числа будут составлять пары с текущим
cnt += m17
else:
# Все предыдущие кратные 51 числа будут составлять пары с текущим
cnt += m51
f.close()
print(cnt)