Pascal. Задача 8-41
На вход программы поступает последовательность из N целых положительных чисел. Известно, что все числа в последовательности различны. Необходимо составить программу, которая подсчитывает количество пар различных элементов последовательности, произведение которых делится на 51. Элементы пары не обязательно должны стоять в последовательности рядом, порядок элементов в паре не важен.
Входные данные: Дан входной файл, в первой строке которого задаётся количество чисел N (1 ⩽ N ⩽ 10000).
В каждой из последующих 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
Вариант 1. Расчет количества произведений после цикла подсчета чисел, кратным 3, 17 и 51.
var
N, X, i, ci, cnt, m1, m3, m17, m51 : integer;
f : text;
begin
Assign(f, 'C:\PABCWork.NET\test-8-41-1.txt');
Reset(f);
Readln(f, N); // Ввод из первой строки
m3:= 0; // счетчик множителей кратных 2
m17:= 0; // счетчик множителей кратных 5
m51:= 0; // счетчик множителей кратных 10
for i := 1 to N do begin
Readln(f, X);
if X mod 51 = 0 then Inc(m51)
else if X mod 17 = 0 then Inc(m17)
else if X mod 3 = 0 then Inc(m3);
end;
Close(f);
cnt := (m51 * (m51 - 1)) div 2; // кратные 51 * кратные 51
cnt := cnt + m51 * (N - m51); // кратные 51 * остальные числа
cnt := cnt + m3 * m17; // кратные 3 * кратные 17
Writeln(cnt);
end.
Вариант 2. Подсчитывание количества произведений происходит на каждом шаге цикла по текущему числу и подсчитанным числам, кратным 3, 17 и 51.
var
N, X, i, ci, cnt, m1, m3, m17, m51 : integer;
f : text;
begin
Assign(f, 'C:\PABCWork.NET\test-8-41-2.txt');
Reset(f);
Readln(f, N); // Ввод из первой строки
m1:= 0; // счетчик чисел
m3:= 0; // счетчик множителей кратных 2
m17:= 0; // счетчик множителей кратных 5
m51:= 0; // счетчик множителей кратных 10
cnt := 0; // Счетчик произведений кратных 10
Readln(f, X); //Ввод первого элемента
// Подсчет произведений
for i := 2 to N do begin
if X mod 51 = 0 then Inc(m51);
if X mod 17 = 0 then Inc(m17);
if X mod 3 = 0 then Inc(m3);
Inc(m1);
Readln(f, X);
if X mod 51 = 0 then cnt := cnt + m1
else if X mod 17 = 0 then cnt := cnt + m3
else if X mod 3 = 0 then cnt := cnt + m17
else cnt := cnt + m51;
end;
Close(f);
Writeln(cnt);
end.