Пояснення:В качестве кандидатов нужно рассматривать числа, не превышающие
(
S
−
1
)
2
, так как в худшем случае составное число вида
x
2
будет иметь два наибольших делителя
x
и 1. Время работы этого алгоритма
O
(
S
4
)
. Можно существенно ускорить вычисления, если учесть, что при поиске разложения на множители числа
N
можно рассмотреть только числа не превышающие
√
N
. Наибольшим делителем числа
N
будет
N
a
, где
a
– наименьший делитель, а вторым наибольшим делителем будет либо
N
b
, где
b
– второй по величине делитель
N
(также либо число, либо
a
2
), либо
a
, если
N
является произведением двух различных чисел, либо 1, если
N
=
a
2
.
Const n=3;
var i, j, tmp, k, z:integer;
c:boolean;
a:array [1..n,1..n] of integer;
begin
c:=false;
for i:=1 to n do
for j:=1 to n do
read(a[i][j]);
for i:=1 to n do
for j:=1 to n do
begin
tmp:=a[i][j];
for k:=i+1 to n do
for z:=j+1 to n do
if tmp = a[k][z] then
c:=true;
end;
writeln;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i][j], ' ');
writeln;
end;
if c = true then
writeln('В данном массиве есть равные друг другу элементы')
else writeln('Элементы, равные друг другу, отсутсвуют в данном массиве');
end.