Приведите алгоритм и обоснуйте правильность метода для представления целого числа N в системе счисления с основанием b, если b может быть нецелым или отрицательным

4 Ноя в 06:58
5 +2
0
Ответы
1
Алгоритм и обоснование (для вещественного основания bbb с ∣b∣>1|b|>1b>1). Выделю два естественных случая: b>1b>1b>1 (включая нецелые) и b<−1b<-1b<1.
Общее: будем представлять целое NNN в виде
N=∑k≤makbk,ak∈D:={0,1,…,⌈∣b∣⌉−1}, N=\sum_{k\le m} a_k b^k,\qquad a_k\in D:=\{0,1,\dots,\lceil |b|\rceil-1\},
N=km ak bk,ak D:={0,1,,b1},
где mmm — максимально возможная целая степень (см. ниже). Полученное разложение может быть либо конечным (остаток обнулится), либо бесконечным (обычно при иррациональном bbb).
1) Случай b>1b>1b>1.
Алгоритм.
- Если N=0N=0N=0 — выдаём цифру 000.
- Возьмём
m=max⁡{k∈Z: bk≤N}. m=\max\{k\in\mathbb Z:\; b^k\le N\}.
m=max{kZ:bkN}.
- Для k=m,m−1,…k=m,m-1,\dotsk=m,m1, выполняем:
ak=⌊Nbk⌋,N←N−akbk. a_k=\left\lfloor\frac{N}{b^k}\right\rfloor,\qquad N\leftarrow N-a_k b^k.
ak =bkN ,NNak bk.
Если после шага N=0N=0N=0, останавливаемся; иначе продолжаем на следующий k−1k-1k1.
Обоснование.
- По выбору mmm имеем 1≤Nbm<b1\le \frac{N}{b^m}<b1bmN <b, поэтому
am=⌊Nbm⌋∈{1,…,⌈b⌉−1}⊂D. a_m=\left\lfloor\frac{N}{b^m}\right\rfloor\in\{1,\dots,\lceil b\rceil-1\}\subset D.
am =bmN {1,,b1}D.
- После вычитания остаётся остаток
r=N−akbk<bk, r=N-a_k b^k< b^k,
r=Nak bk<bk,
поэтому следующий используемый показатель не превосходит k−1k-1k1 (степень уменьшается хотя бы на единицу). По конструкции в любой момент сумма выписанных членов равна начальной величине NNN и в случае остановки даёт точное конечное представление; если остановки не происходит, последовательность цифр задаёт стандартную бета‑(greedy) экспансию:
N=∑k≤makbk. N=\sum_{k\le m} a_k b^k.
N=km ak bk.

2) Случай b<−1b<-1b<1.
Алгоритм (аналогично, с учётом знака степеней).
- Если N=0N=0N=0 — выдаём 000.
- Положим
m=max⁡{k∈Z: ∣b∣k≤∣N∣}. m=\max\{k\in\mathbb Z:\; |b|^k\le |N|\}.
m=max{kZ:bkN}.
- Для k=m,m−1,…k=m,m-1,\dotsk=m,m1, выбираем целую цифру ak∈Da_k\in Dak D по правилу
ak={⌊Nbk⌋,если bk>0,⌈Nbk⌉,если bk<0, a_k=
\begin{cases}
\left\lfloor\frac{N}{b^k}\right\rfloor, & \text{если } b^k>0,\\[4pt]
\left\lceil\frac{N}{b^k}\right\rceil, & \text{если } b^k<0,
\end{cases}
ak ={bkN ,bkN , если bk>0,если bk<0,
и обновляем N←N−akbkN\leftarrow N-a_k b^kNNak bk. Останавливаемся при N=0N=0N=0 либо продолжаем дальше.
Короткое обоснование правильности выбора.
- Для bk>0b^k>0bk>0 аналогично случаю b>1b>1b>1 имеем 1≤Nbk<∣b∣1\le\frac{N}{b^k}<|b|1bkN <b, потому ⌊N/bk⌋∈D\lfloor N/b^k\rfloor\in DN/bkD.
- Для bk<0b^k<0bk<0 дробь x=Nbkx=\frac{N}{b^k}x=bkN лежит в интервале (−∣b∣,−1](-|b|,-1](b,1]. Тогда ⌈x⌉\lceil x\rceilx даёт целое в интервале {0,1,…,⌈∣b∣⌉−1}=D\{0,1,\dots,\lceil|b|\rceil-1\}=D{0,1,,b1}=D. В обоих случаях выбранная цифра обеспечивает остаток
r=N−akbkс ∣r∣<∣b∣k, r=N-a_k b^k\quad\text{с }|r|<|b|^k,
r=Nak bkс r<bk,
причём следующий индекс не превосходит k−1k-1k1. По индукции сумма выписанных членов равна исходному NNN; алгоритм даёт корректную позиционную запись (конечную при обнулении остатка, иначе бесконечную).
Замечания.
- Выбор алфавита D={0,…,⌈∣b∣⌉−1}D=\{0,\dots,\lceil|b|\rceil-1\}D={0,,b1} стандартен и гарантирует неотрицательные цифры; можно использовать и другие системно допустимые множества цифр при соответствующей корректировке правил.
- Для некратных или иррациональных bbb запись целого числа может быть бесконечной (это нормально — это бета‑экспансия). Для некоторых классов оснований (например, целые bbb или некоторые алгебраические числа типа Пизо) представления конечны или периодичны.
4 Ноя в 07:58
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир