Блок-схема во вложении. Конечно, она реализует самый примитивный алгоритм, который заключается в умножении В раз А на А. Существуют более оптимальные алгоритмы, основанные на двоичном представлении В. Пусть В=5. Его двоичное представление 101, т.е. 2²+1. Это означает. что нам надо перемножить А и (А*А)². Т.е. вычисление оптимально идет так: С=А², С=С², С=С*А. Итого три умножения вместо четырех. Для больших В "экономия умножений" будет очень большой. Например, для В=1024 потребуется не 1023 умножения, а всего 10.
Конечно, она реализует самый примитивный алгоритм, который заключается в умножении В раз А на А.
Существуют более оптимальные алгоритмы, основанные на двоичном представлении В.
Пусть В=5. Его двоичное представление 101, т.е. 2²+1. Это означает. что нам надо перемножить А и (А*А)². Т.е. вычисление оптимально идет так: С=А², С=С², С=С*А. Итого три умножения вместо четырех. Для больших В "экономия умножений" будет очень большой. Например, для В=1024 потребуется не 1023 умножения, а всего 10.
Совсем не но как минимум даст толчок
Объяснение:
Сам на паскале не пишу, но нашел программку:
var
a,b,n,m,i: word;
begin
write('Числовой промежуток: ');
readln(a,b);
write('Количество делителей не менее... ');
readln(n);
while a <= b do begin
m := 0;
for i:=1 to a do
if a mod i = 0 then m := m + 1;
if m >= n then begin
write(a,' - ', m,' - ');
for i:=1 to a do
if a mod i = 0 then write(i,' ');
writeln;
end;
a := a + 1;
end;
end.
Вот как примерно выглядит на выходе:
Числовой промежуток: 21 44
Количество делителей не менее... 5
24 - 8 - 1 2 3 4 6 8 12 24
28 - 6 - 1 2 4 7 14 28
30 - 8 - 1 2 3 5 6 10 15 30
32 - 6 - 1 2 4 8 16 32
36 - 9 - 1 2 3 4 6 9 12 18 36
40 - 8 - 1 2 4 5 8 10 20 40
42 - 8 - 1 2 3 6 7 14 21 42
44 - 6 - 1 2 4 11 22 44