Представление целого числа в g -ичной системе счисления — КиберПедия 

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Представление целого числа в g -ичной системе счисления

2020-07-07 452
Представление целого числа в g -ичной системе счисления 0.00 из 5.00 0 оценок
Заказать работу

Теорема 1. Пусть g – целое число> 1, S = {0, 1, …, g -1}. Тогда любое целое число a > 1 единственным образом представляется в виде

,                               (1)

где ai Î S, i = 1,…, n.

Доказательство. Существование представления (1) доказываем методом математической индукции по a. Пусть a = 1. Тогда формула (1) имеет место при n =0, a 0 = 1.

Предположим, что равенство (1) имеет место для любого целого числа q, 1£ q < a и докажем его для числа a. Разделим число a на g с остатком:

a = gq + r,r < g.                                         (2)

Если q = 0, то равенство (1) имеет место при    n =0, a 1 = r. Если q >0, то

a = gq + r ³ gq > q

и к числу q можно применить индуктивное предположение. По индуктивному предположению:

,                             (3)

где ai Î S, i = 2,…, n. Подставляя (3) в (2) получим

где a 0 = r, ai Î S, i = 0,…, n. Существование представления (1) доказано.

Доказывая единственность, допустим противное, что существует такое число для которого имеется два представления. Пусть a – наименьшее натуральное число для которого имеется два представления (1) и

  ,                               (4)

где bi Î S, i = 1,…, m. Тогда имеем

,

 

где a 1, b 1Î S. В силу теоремы о делении с остатком получим:

a 1 = b 1, .

Так a – наименьшее натуральное число, для которого имеется два разложения вида (1), то для числа b < a имеет место одно разложение вида (1). Тогда получим, что m = n и a 1 = b 1, a 2 = b 2, a 3 = b 3, ….. Получаем противоречие с предположением и единственность доказана.ÿ

Представление целого числа a в виде (1) называется g – ичным представлением целого числа. При этом число g называется основанием системы счисления, числа множества S = {0, 1, …, g -1} будем называть цифрами g – ичной системы счисления. Число n называется значностью числа a. Сокращенно равенство (1) записывают в виде:

 

или в виде массива

,                                          (5)

при этом в массиве допускаются последние нулевые элементы.

Перевод числа a из g 1 – ичной записи в g – ичную производится деление числа a на g с остатком, полученный остаток число a 0,  а неполное частное q 1; q 1 делим на g с остатком, полученный остаток число a 1,  а неполное частное q 2; q 2 делим на g с остатком, полученный остаток число a 2,  а неполное частное q 3; и т.д.

 

3. Целочисленная арифметика многократной точности

 

Будем считать, что основание не всегда равно 2, можно предполагать, что оно имеет размер машинного слова или двойного слова. Будем считать, что данные числа записаны в g – ичной системе счисления в виде массива (5), каждая цифра числа записана в отдельную ячейку памяти. При этом предполагаем, что натурально число записано не более n g – ичными цифрами. Последние цифры допускаются равными нулю. Знак целого числа удобно хранить в отдельной ячейке. Предполагаем, что программа реализуется на ассемблере, где реализована программа деления с остатком за один шаг. Обозначаем такое деление в виде:

(q, r)=div(a, b),

где q и   r  соответственно неполное частное и остаток от деления a на b.

Пусть даны два целых числа

,

Знак переноса в другой разряд обозначаем через f (флаг переноса).

Алгоритм сложения неотрицательных целых чисел:

Вход: , ;

f:=0;

for i = 1… n; (f, ci): = div (ai + bi + f, g); end for

if f > 0 then n:= n +1; cn:= f; end if

Выход: .

При сложении двух n -значных чисел требуется выполнить   n операций деления с остатком и 2 n операций сложений чисел величиной с цифру.

При вычитании сначала проверяется, находится знак разности, а затем из числа с большим модулем вычитается число с меньшим модулем. Предполагается, что знак разности сохраняется в ячейке c 0.

Алгоритм вычитания неотрицательных целых чисел:

Вход: , ;

c = 0; f:=0;

for i = n …1; if ai > bi then c 0:=+1; break  else if ai < bi then c 0:= -1; break  end if;

End for

if c 0:= 1 then

for i = 1… n; (f, ci): = div (ai - bi + f, g); end for

else if c 0:= -1 then

for i = 1… n; (f, ci): = div (bi - ai + f, g); end for

end if;

Выход: .

При вычитании двух n -значных чисел требуется выполнить   n операций деления с остатком и 2 n операций вычитаний чисел величиной с цифру и n сравнений.

Пусть даны два целых числа

,

Перенос в другой разряд обозначаем через f (флаг переноса). Находим произведение чисел . Произведение чисел можно выполнять по формулам:

,                    (1)

 ,                   (2)

где при l <1 мы полагаем al = 0, bl = 0.

Алгоритм, реализуемый по формуле (1) напоминает «умножение столбиком», а по формуле (2) «умножение быстрым столбиком»

Алгоритм умножения неотрицательных целых чисел столбиком.

Вход: , ;

c = 0; f:=0;

for j = 1… m;

if bi > 0 then

for i = 1… n; (f, ci + j- 1): = div (ci + j- 1 + ai bj + f, g); end for

end if;

End for

Выход: .

При умножении n -значного числа на m -значное число по этому алгоритму требуется выполнить не более nm операций умножения, nm операций деления с остатком, 2 nm операций сложения.

Алгоритм умножения неотрицательных целых чисел быстрый столбик.

Вход: , ;

c = 0; f:=0;

for k = 1… n+m- 1;       

for i = 1… k;

   if n-i >0 and m-k + i > 0 then f:= f+ an-i · bm-k+i end if;

end for

(f, ck): = div (f, g);

End for

Выход: .

При умножении n -значного числа на m -значное число требуется выполнить nm операций умножения, n + m операций сложения и n + m операций деления с остатком.

В 1962 году студент МГУ, ныне профессор А.А.Карацуба предложил более быстрый способ умножения больших многозначных чисел. Предположим, что у нас имеется два 2 n -значных числа:

, .

Положим

,

где

, .

Тогда

. (3)

Таким образом, при умножении двух 2 n -значных чисел по формуле (3) нужно 3 умножения n -значных чисел, 4 сложения и 2 вычитания и 4 сдвига n-значных чисел. По формуле требуется 4 сложения и 3 сдвига. (4) требуется 4 умножения и 3 сдвига.

При больших n метод Карацубы становится более эффективным, чем «быстрый столбец».Если обозначить через T (n) число битовых операций для умножения двух n -разрядных чисел, то

T (2 n) = 3 T (n) + cn,                                      (4)

где c – константа. Используя эти соображения получим, что

.

Установлено, что существует метод умножения двух n -значных двоичных чисел, требующий не более O(n ·ln n · lnln n) двоичных операций.

Пусть дано целое число

иодноразрядное число b,b < g. Находим частное  и остаток r.

Алгоритм деления неотрицательного целого числа на однозначное число.

Вход: , ;

r = 0;  

for i = 1… n;       

(ci, r): = div (rg+ai, b);

End for

Выход: .

Рассмотрим алгоритм деления целых чисел в общем случае. Задача деления целых чисел упирается в задачу подбора очередной цифры неполного частного в следующей ситуации. Пусть , , причем bn >0, a / b < g. Нам нужно найти частное от деления a на b:

.                                           (5)

Условие a / b < g равносильно неравенству a / g < b, что равносильно неравенству

                                         (6)

Обозначим

                                           (7)

Лемма 1. При указанных выше условиях справедливо неравенство

q £ q `.                                                       (8)

При дополнительном условии bn > [ g /2] справедливо неравенство

q `-2 £ q.                                                      (9)

Замечание. Чтобы оказаться в рамках второго условия леммы 1 необходимо нормализовать числа a и b, умножив их оба на . При этом доказывается, что частное q не изменяется.

Алгоритм деления  неотрицательных целых чисел.

Вход: делимое , делитель , n ³ 2;

Нормализация чисел a и b (нахождение нормализирующего множителя и умножение на него чисел a и b).

(d, k): = div (g, bn +1);

t:=0; for i = 1… n + m; (t, ai): = div (tg + dai, g); end for;

if t >0 then m:= m+ 1; am:= t; end if;

t:=0; for i = 1… n; (t, bi): = div (tg + dbi, g); end for;

for j = m …1; 

Подбор очередной цифры qm неполного частного. Обеспечение условий подбора очередной цифры (a / b < g, a < gb, e = gb)

e:= (0, b 1,…, bn);

p:=1;

for v = 0 … g -1;

      for i =  n …1;

           if bi > an+i   then   p:=1; break else if bi < an+i   then break;  end if;

       end for

         if p =1  then break;end if;

end for

Нахождение приближенного значения q ` цифры qm неполного частного по формуле (7).

if bn = an+j   then q`:= g - 1 else (q`, t): = div (an+j g + an+j- 1, bn);  end if;

Уточнение приближенного значения q ` цифры qm неполного частного.

 while   bn- 1 q` > ( an+j g + an+j- 1 - bnq` ) g + an+j- 2 do  q`:= q`- 1; end while;

Проверка правильности подбора приближенного значения q ` цифры qm  и ее уточнение:

t:=0; for i = 1… n; (t, aj+i): = div (aj+i - q`bi + tg, g); end for;

qm := q`;

if t <0 then qm := qm -1; t:=0;  

    for i = 1… n; (t, aj+i): = div (bi-aj+i + tg, g); end for;

end if;

qm := qm + vg; (не всегда цифра в g -ичной системе счисления.

end for;

Нахождение правильного представления неполного частного и остатка.

 t:=0; for i = 1… n; (t, qi): = div (qj + tg, g); end for;

if t >0 then n:= n+ 1; qm:= t; end if;

t = 0; for i = 1… n; (ri, t): = div (tg+ai, d); end for

Выход: неполное частное , остаток .

Возведение в натуральную степень. Предполагается, что операция умножения многозначных чисел уже реализована. Требуется число a возвести в степень числа m. Представим число m в двоичной системе счисления:

.                         (6)

Тогда возможны два возможных алгоритма вычисления степени am , которые получаются из следующих равенств:

,         (7)

.         (8)

Алгоритмы называются бинарными алгоритмами возведения в степень.

В первом случае находятся степени . Затем находится произведение всех hj,, для которых mi ¹0:

.

Во втором случае находят , далее

.

Первый алгоритм возведения в степень.

Вход: основание a, показатель степени m;

b:=1; h:= a;

while m  > 0 do  (m, r): = div (m, 2);

if r >0 then b:= bh; end if;

if m > 0 then h:= h·h; end if;

end while;

Выход: b.

Второй  алгоритм возведения в степень.

Вход: основание a, показатель степени m;

b:= a; h:=2 j:=-1;

while m  > 0 do  j:= j +1; (m, mj): = div (m, 2); end while;

for i = j-1…0; if mj >0 then b:= b·b·a else b:= b·b; end if; end for;

Выход: b.

Первый способ более экономен в отношении памяти, во втором способе происходит экономия на умножении.

 


Поделиться с друзьями:

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.073 с.