для нахождения НОДа не мало, не буду углубляться во всякие сложные алгоритмы, так как вряд ли Вы их проходите.
Сравним перебор и алгоритм Евклида, сразу можем сказать, что алгоритм Евклида в разы быстрее, так как при переборе мы тупо перебираем значения, то есть, данный алгоритм зависит от величины числа очень сильно. Конечно, алгоритм Евклида также зависит от введенного числа, однако, в нём будет намного меньше повторений, нежели в с перебором.
Можем глянуть немного статистики:
Генерируется 500 пар чисел
Перебор - 0.5022 с
Алгоритм Евклида - 0.0008
Теперь мы точно можем сделать вывод, что алгоритм Евклида в разы быстрее простого перебора.
// PascalABC.NET 3.2, сборка 1344 от 22.11.2016 // Внимание! В других версиях работа не гарантируется! begin var a:=ArrRandom(15,-20,20); a.Println; a:=a.Select(x->x.IsOdd?x*3:x div 2).ToArray; a.Println end.
А вот так это же самое обычно делают в школах... const n=15; var a:array[1..n] of integer; i:integer; begin Randomize; for i:=1 to n do begin a[i]:=Random(41)-20; Write(a[i],' ') end; Writeln; for i:=1 to n do begin if a[i] mod 2=0 then a[i]:=a[i] div 2 else a[i]:=a[i]*3; Write(a[i],' ') end; Writeln end.
для нахождения НОДа не мало, не буду углубляться во всякие сложные алгоритмы, так как вряд ли Вы их проходите.
Сравним перебор и алгоритм Евклида, сразу можем сказать, что алгоритм Евклида в разы быстрее, так как при переборе мы тупо перебираем значения, то есть, данный алгоритм зависит от величины числа очень сильно. Конечно, алгоритм Евклида также зависит от введенного числа, однако, в нём будет намного меньше повторений, нежели в с перебором.
Можем глянуть немного статистики:
Генерируется 500 пар чисел
Перебор - 0.5022 с
Алгоритм Евклида - 0.0008
Теперь мы точно можем сделать вывод, что алгоритм Евклида в разы быстрее простого перебора.
// Внимание! В других версиях работа не гарантируется!
begin
var a:=ArrRandom(15,-20,20); a.Println;
a:=a.Select(x->x.IsOdd?x*3:x div 2).ToArray; a.Println
end.
Пример
-1 -2 8 8 19 -12 13 -11 -7 -10 3 5 -18 4 3
-3 -1 4 4 57 -6 39 -33 -21 -5 9 15 -9 2 9
А вот так это же самое обычно делают в школах...
const
n=15;
var
a:array[1..n] of integer;
i:integer;
begin
Randomize;
for i:=1 to n do begin
a[i]:=Random(41)-20;
Write(a[i],' ')
end;
Writeln;
for i:=1 to n do begin
if a[i] mod 2=0 then a[i]:=a[i] div 2
else a[i]:=a[i]*3;
Write(a[i],' ')
end;
Writeln
end.