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

Ответ
316661180
Решение
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)