Другие языки программирования и технологии

ПАСКАЛЬ. Необходимо определить количество пар, для которых произведение элементов делится на 26 или на 33.

На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности (элементы пары не обязаны стоять в последовательности рядом, порядок элементов в паре не важен). Необходимо определить количество пар, для которых произведение элементов делится на 26 или на 33.
!!!Моя программа работает, но не для всех случаев. Подскажите пожалуйста! Как исправить?
var i, x, n, k2, k3, k11, k13, k26, k33, S: integer;
begin
readln(n);
for i:=1 to n do begin
readln(x);
if (x mod 33>0) and (x mod 26>0) then
begin
if (x mod 2 =0) and (x mod 13>0) then k2:=k2+1;
if (x mod 13 =0) and (x mod 2>0) then k13:=k13+1;
if (x mod 3 =0) and (x mod 11>0) then k3:=k3+1;
if (x mod 11 =0) and (x mod 3>0) then k11:=k11+1;
end;
if (x mod 26=0) then k26:=k26+1;
if (x mod 33=0) then k33:=k33+1;
end;
S:=k2*k13+k26*(n-k26-k33)+k26*(k26-1)div 2+k3*k11+k33*(n-k33-k26)+k33*(k33-1)div 2;
writeln(S);
end.
У тебя есть 10 вариантов делителей:

26 = 2 * 13
33 = 3 * 11
143 = 13 * 11
39 = 13 * 3
22 = 11 * 2
6 = 2 * 3
13
11
3
2

Ты же рассматриваешь только 6 вариантов.
А дубли убираются обработкой делителей сверху вниз.

if (x mod 26 = 0) or (x mod 33 = 0) then inc(kFull)
else if x mod 143 = 0 then inc(k143)
else if x mod 39 = 0 then inc(k39)
else if x mod 22 = 0 then inc(k22)
else if x mod 6 = 0 then inc(k6)
else if x mod 13 = 0 then inc(k13)
else if x mod 11 = 0 then inc(k11)
else if x mod 3 = 0 then inc(k3)
else if x mod 2 = 0 then inc(k2);

s := kFull * (kFull - 1) div 2 + kFull * (n - kFull) + k143 * (k39 + k22 + k6 + k3 + k2) +
k39 * (k22 + k6 + k11 + k2) + k22 * (k6 + k13 + k3) + k6 * (k11 + k13) + k13 *k2 + k11 * 3;
Игорь Цветухин
Игорь Цветухин
83 292
Лучший ответ
Алексей Иванча Sample Input:

15
3
4
33
11
17
26
51
39
8
52
6
858
1716
143
66
Sample Output:

82

Твой код выводит 83 вместо 82, сам не очень понял из-за чего, вроде всё верно.
Алексей Иванча Ага, сейчас заметил, спасибо
и сдесь ахинея (
Feliks Tukeshov
Feliks Tukeshov
20 235
Оксана Ильмекова может тогда поможете?

Похожие вопросы