Пояснення:В качестве кандидатов нужно рассматривать числа, не превышающие
(
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 = 12;
var
i, p: integer;
a: array[1..n] of integer;
begin
p := 1;
for i := 1 to n do
begin
a[i] := random(150) - 100;
write(a[i], ' ');
if a[i] > 0 then p := p * a[i];
end;
writeln;
writeln('P = ', p);
end.
2)uses crt;
var a:array [1..10] of integer;
i:integer;
begin
clrscr;
randomize;
{генерируем и выводим новый массив}
for i:=1 to 10 do
begin
a[i]:=random(9)+1;
write(a[i]:3);
end;
writeln;
{в цикле проверяем если счетчик i делится на 2 ( признак четности) то либо возводим в степень либо удваиваем}
for i:=1 to 10 do
begin
if (i mod 2=0 ) then a[i]:=a[i]*a[i]
else a[i]:=a[i]*2;
end;
{выводим конечный массив}
for i:=1 to 10 do
write(a[i]:3);
readkey;
end.
3)var arr:array[1..20] of integer;
max,q:integer;
begin
writeln ('ARRAY: ');
for q:=1 to 20 do
begin
arr[q]:=random(80);
write (arr[q]:3);
end;
max:=arr[1];
for q:=2 to 20 do
if arr[q]>max then max:=arr[q];
writeln;
writeln('MAX = ',max);
end.
2)отладка программы - это этап разработки на котором ищут и устаняют ошибки
3)тест - метод изучения процесов системы
Как то так