function summdel(x:integer):integer; //результат - сумма делителей х var k,sum:integer; begin sum:=0; for k := 1 to x div 2 + 1 do if x mod k = 0 then sum:= sum+k; summdel:=sum; end;
begin writeln('Введите границы a,b '); readln(a,b); maxsumm := 1; max := 1; for i := a to b do begin if summdel(i) > maxsumm then begin maxsumm:= summdel(i); max := i; end; end; writeLn('Максимальная сумма делителей - ', maxsumm, ' число - ',max) end.
Ответ : равномерное кодирование удобно для декодирования. однако часто применяют и неравномерные коды, т.е. коды с различной длиной кодовых слов. это полезно, когда в исходном тексте разные буквы встречаются с разной частотой. тогда часто встречающиеся символы стоит кодировать более короткими словами, а редкие – более длинными. из примера 1 видно, что (в отличие от равномерных кодов! ) не все неравномерные коды допускают однозначное декодирование.
есть простое условие, при выполнении которого неравномерный код допускает однозначное декодирование.
код называется префиксным, если в нем нет ни одного кодового слова, которое было бы началом (по-научному, - префиксом) другого кодового слова.
код из примера 1 – не префиксный, так как, например, код буквы а (т.е. кодовое слово 1) – префикс кода буквы к (т.е. кодового слова 12, префикс выделен жирным шрифтом).
var a,b, I, maxsumm, max : integer;
function summdel(x:integer):integer; //результат - сумма делителей х
var k,sum:integer;
begin
sum:=0;
for k := 1 to x div 2 + 1 do
if x mod k = 0 then sum:= sum+k;
summdel:=sum;
end;
begin
writeln('Введите границы a,b ');
readln(a,b);
maxsumm := 1;
max := 1;
for i := a to b do
begin
if summdel(i) > maxsumm then
begin maxsumm:= summdel(i);
max := i;
end;
end;
writeLn('Максимальная сумма делителей - ', maxsumm, ' число - ',max)
end.