Система остаточных классов — различия между версиями
Turbo (обсуждение | вклад) |
Turbo (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
== Преимущества системы остаточных классов == | == Преимущества системы остаточных классов == | ||
* В СОК арифметические операции (сложение, вычитание, умножение, деление) выполняются покомпонентно, если про результат известно, что он является целочисленным и также лежит в <math>[0,M-1]</math>. | * В СОК арифметические операции (сложение, вычитание, умножение, деление) выполняются покомпонентно, если про результат известно, что он является целочисленным и также лежит в <math>[0,M-1]</math>. | ||
+ | Формула для сложения: | ||
+ | <math>(x_1, x_2, \dots, x_n) + (y_1, y_2, \dots, y_n) = (z_1, z_2, \dots, z_n)</math>, где | ||
+ | : <math>z_1 \equiv (x_1 + y_1) \pmod{m_1};</math> | ||
+ | : <math>z_2 \equiv (x_2 + y_2) \pmod{m_2};</math> | ||
+ | : ... | ||
+ | : <math>z_n \equiv (x_n + y_n) \pmod{m_n};</math> | ||
+ | Аналогично выполняются вычитание, умножение и деление. | ||
== Недостатки системы остаточных классов == | == Недостатки системы остаточных классов == | ||
Строка 40: | Строка 47: | ||
== Численный пример == | == Численный пример == | ||
+ | |||
+ | == Пример == | ||
Рассмотрим СОК с базисом <math>(2;3;5)</math>. В этом базисе можно взаимооднозначно представить числа из промежутка от <math>0</math> до <math>29</math>, так как <math>M = 2\times 3\times 5 = 30</math>. Таблица соответствия чисел из позиционной системы счисления и системы остаточных классов: | Рассмотрим СОК с базисом <math>(2;3;5)</math>. В этом базисе можно взаимооднозначно представить числа из промежутка от <math>0</math> до <math>29</math>, так как <math>M = 2\times 3\times 5 = 30</math>. Таблица соответствия чисел из позиционной системы счисления и системы остаточных классов: | ||
Строка 58: | Строка 67: | ||
=== Пример сложения === | === Пример сложения === | ||
+ | Сложим два числа 9 и 14 в базисе <math>(2;3;5)</math>. Их представление в заданном базисе <math>9=(1;0;4)</math> и <math>14=(0;2;4)</math> (см. табличку выше). Воспользуемся формулой для сложения: | ||
+ | <math>(z_1, z_2, z_3) = (1, 0, 4) + (0, 2, 4)</math> | ||
+ | : <math>z_1 \equiv (x_1 + y_1) \pmod{m_1} \equiv (1 + 0) \pmod{2} = 1;</math> | ||
+ | : <math>z_2 \equiv (x_2 + y_2) \pmod{m_2} \equiv (0 + 2) \pmod{3} = 2;</math> | ||
+ | : <math>z_3 \equiv (x_3 + y_3) \pmod{m_3} \equiv (4 + 4) \pmod{5} = 3;</math> | ||
+ | <math>(z_1, z_2, z_3) = (1, 2, 3)</math> - по таблице убеждаемся, что результат равен 23. | ||
=== Пример умножения === | === Пример умножения === | ||
+ | Умножим два числа 4 и 5 в базисе <math>(2;3;5)</math>. Их представление в заданном базисе <math>4=(0;1;4)</math> и <math>5=(1;2;0)</math> (см. табличку выше). Воспользуемся формулой для умножения: | ||
+ | <math>(z_1, z_2, z_3) = (0, 1, 4) * (1, 2, 0)</math> | ||
+ | : <math>z_1 \equiv (x_1 * y_1) \pmod{m_1} \equiv (0 * 1) \pmod{2} = 0;</math> | ||
+ | : <math>z_2 \equiv (x_2 * y_2) \pmod{m_2} \equiv (1 * 2) \pmod{3} = 2;</math> | ||
+ | : <math>z_3 \equiv (x_3 * y_3) \pmod{m_3} \equiv (4 * 0) \pmod{5} = 0;</math> | ||
+ | <math>(z_1, z_2, z_3) = (0, 2, 0)</math> - по таблице убеждаемся, что результат равен 20. | ||
+ | Замечание: если бы мы умножали или складывали числа, которые дали в результате умножения число больше или равное <math>M = 30</math>, то полученный результат <math>RES \equiv REAL \pmod{M}</math>, где <math>REAL</math> - результат операции в позиционной системе счисления. | ||
== Литература == | == Литература == |
Версия 06:43, 11 февраля 2013
Система остаточных классов (СОК) (от англ. Residue number system, другое название Модулярная арифметика) - непозиционная система счисления. Представление числа в системе остаточных классов основано на понятии вычета и китайской теореме об остатках. СОК определяется набором взаимно простых модулей с произведением
так, что каждому целому числу
из отрезка
ставится в соответствие набор вычетов
, где
-
-
- …
-
При этом китайская теорема об остатках гарантирует однозначность представления для чисел из отрезка .
Содержание
Преимущества системы остаточных классов
- В СОК арифметические операции (сложение, вычитание, умножение, деление) выполняются покомпонентно, если про результат известно, что он является целочисленным и также лежит в
.
Формула для сложения:
, где
-
-
- ...
-
Аналогично выполняются вычитание, умножение и деление.
Недостатки системы остаточных классов
- Возможность представления только ограниченного количества чисел.
- Отсутствие эффективных алгоритмов для сравнения чисел, представленных в СОК. Сравнение обычно осуществляется через перевод аргументов из СОК в смешанную систему счисления по основаниям
.
- Сложные реализации алгоритмов перевода из позиционной системы счисления в СОК и обратно.
Применение системы остаточных классов
СОК широко используется в микроэлектронике в специализированных устройствах [ЦОС], где требуется:
- контроль за ошибками, за счет введения дополнительных избыточных модулей
- высокая скорость работы, которую обеспечивает параллельная реализация базовых арифметических операций
Основные определения
Система остаточных классов используется для представления больших чисел , обеспечивая таким образом более эффективные вычисления. В основе данного представления лежит изоморфизм
, который доставляет китайская теорема об остатках.
Системой остаточных классов называют произвольное конечное множество , такое что
, где
. Пусть задана произвольная система остаточных классов
и положим, что
. Тогда в силу китайской теоремы об остатках имеем эпиморфизм колец
, т.ч.
, который индуцирует канонический изоморфизм
.
Выполнение арифметических операций
С использованием системы остаточных классов можно выполнять основные арифметические операции.
Сложение и вычитание
Пусть - произвольные натуральные числа. Положим, что
представляются в виде системы остаточных классов как
и
соответственно. Формально,
. В силу того, что
- изоморфизм будем иметь
. Обозначим через
остаток
от деления на
. Тогда
представляется в виде системы остаточных классов как
.
Умножение
- остаток от деления
на
. Тогда
представляется в виде системы остаточных классов как
.
Деление
Деление на
с использованием системы остаточных классов можно выполнять не всегда. Положим, что
- остаток
от деления на
. На языке теории колец это означает, что
обратим и
- обратный. Тогда
представляется в виде
.
Факторизация полупростых чисел
Пусть - полупростое число. Рассмотрим систему остаточных классов
, где
—
-е простое число.
Численный пример
Пример
Рассмотрим СОК с базисом . В этом базисе можно взаимооднозначно представить числа из промежутка от
до
, так как
. Таблица соответствия чисел из позиционной системы счисления и системы остаточных классов:
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Пример сложения
Сложим два числа 9 и 14 в базисе . Их представление в заданном базисе
и
(см. табличку выше). Воспользуемся формулой для сложения:
- по таблице убеждаемся, что результат равен 23.
Пример умножения
Умножим два числа 4 и 5 в базисе . Их представление в заданном базисе
и
(см. табличку выше). Воспользуемся формулой для умножения:
- по таблице убеждаемся, что результат равен 20.
Замечание: если бы мы умножали или складывали числа, которые дали в результате умножения число больше или равное , то полученный результат
, где
- результат операции в позиционной системе счисления.