Система остаточных классов — различия между версиями
Turbo (обсуждение | вклад) |
Turbo (обсуждение | вклад) |
||
Строка 19: | Строка 19: | ||
* Возможность представления только ограниченного количества чисел. | * Возможность представления только ограниченного количества чисел. | ||
* Отсутствие эффективных алгоритмов для сравнения чисел, представленных в СОК. Сравнение обычно осуществляется через перевод аргументов из СОК в смешанную систему счисления по основаниям <math>(m_1, m_1\cdot m_2, \dots, m_1\cdot m_2\cdot\dots\cdot m_{n-1})</math>. | * Отсутствие эффективных алгоритмов для сравнения чисел, представленных в СОК. Сравнение обычно осуществляется через перевод аргументов из СОК в смешанную систему счисления по основаниям <math>(m_1, m_1\cdot m_2, \dots, m_1\cdot m_2\cdot\dots\cdot m_{n-1})</math>. | ||
− | * | + | * Медленные и требующие работы с большими числами реализации алгоритмов перевода из позиционной системы счисления в СОК и обратно. |
+ | * Сложные алгоритмы деления (для случая, когда результат не является целым) | ||
+ | * Трудность в обнаружении переполнения | ||
== Применение системы остаточных классов == | == Применение системы остаточных классов == | ||
Строка 25: | Строка 27: | ||
* контроль за ошибками, за счет введения дополнительных избыточных модулей | * контроль за ошибками, за счет введения дополнительных избыточных модулей | ||
* высокая скорость работы, которую обеспечивает параллельная реализация базовых арифметических операций | * высокая скорость работы, которую обеспечивает параллельная реализация базовых арифметических операций | ||
+ | |||
+ | == Специальные системы модулей == | ||
+ | В модулярной арифметике существуют специальные наборы модулей, которые позволяют частично нивелировать недостатки и для которых существуют эффективные алгоритмы сравнения чисел и для прямого и обратного перевода модулярных чисел в позиционную систему счисления. Одной из самых популярных систем модулей является набор из трех взаимнопростых чисел вида '''{2<sup>n</sup>-1, 2<sup>n</sup>, 2<sup>n</sup>+1}''' | ||
== Основные определения == | == Основные определения == | ||
Строка 84: | Строка 89: | ||
Замечание: если бы мы умножали или складывали числа, которые дали в результате умножения число больше или равное <math>M = 30</math>, то полученный результат <math>RES \equiv REAL \pmod{M}</math>, где <math>REAL</math> - результат операции в позиционной системе счисления. | Замечание: если бы мы умножали или складывали числа, которые дали в результате умножения число больше или равное <math>M = 30</math>, то полученный результат <math>RES \equiv REAL \pmod{M}</math>, где <math>REAL</math> - результат операции в позиционной системе счисления. | ||
− | == | + | === Пример деления, при условии, что оно делится нацело === |
− | + | Деление может быть выполнено аналогично умножению, но только если делитель делит делимое нацело, без остатка. | |
− | + | <br /> | |
− | + | Для модулей <math>(29;31;32)</math> разделим число 1872 на 9.<br /> | |
− | + | Делим <math>1872=(16;12;16)</math> на <math>9=(9;9;9)</math>.<br /> | |
− | + | ||
− | + | Воспользуемся формулой<br /> | |
− | + | <math>z_i \equiv (x_i * y_i^{-1}) \pmod{m_i};</math> | |
− | + | <br /><br /> | |
− | + | Здесь надо сказать, что <math>y_i^{-1}*y_i=1 \pmod{m_i}</math>, что не то же самое, что просто разделить x на y.<br /> | |
− | + | По формуле <math>y_i^{m_i-1}=1 \pmod{m_i}</math> получаем<br /> | |
− | + | <math>9^{29-2} \pmod{29} = 13</math><br /> | |
− | + | <math>9^{31-2} \pmod{31} = 7</math><br /> | |
− | + | <math>9^{32-2} \pmod{32} = 17</math><br /> | |
− | + | ||
− | + | ||
− | + | <math>z_1 \equiv (16*13) \pmod{29} = 5</math><br /> | |
− | + | <math>z_2 \equiv (12*7) \pmod{31} = 22</math><br /> | |
+ | <math>z_3 \equiv (16*17) \pmod{32} = 16</math><br /> | ||
+ | <br /> | ||
+ | Это и есть правильный результат - число 208. Однако такой результат можно получить только если известно, что деление производится без остатка. | ||
+ | |||
+ | == Ссылки == | ||
+ | * Книга "Residue Number Systems: Theory and Implementation", Amos Omondi, Benjamin Premkumar - наиболее исчерпывающая информация о применении СОК с подробными примерами (на английском языке). |
Версия 15:48, 23 апреля 2013
Система остаточных классов (СОК) (от англ. Residue number system, другое название Модулярная арифметика) - непозиционная система счисления. Представление числа в системе остаточных классов основано на понятии вычета и китайской теореме об остатках. СОК определяется набором взаимно простых модулей с произведением так, что каждому целому числу из отрезка ставится в соответствие набор вычетов , где
- …
При этом китайская теорема об остатках гарантирует однозначность представления для чисел из отрезка .
Содержание
Преимущества системы остаточных классов
- В СОК арифметические операции (сложение, вычитание, умножение, деление) выполняются покомпонентно, если про результат известно, что он является целочисленным и также лежит в .
Формула для сложения: , где
- ...
Аналогично выполняются вычитание, умножение и деление.
Недостатки системы остаточных классов
- Возможность представления только ограниченного количества чисел.
- Отсутствие эффективных алгоритмов для сравнения чисел, представленных в СОК. Сравнение обычно осуществляется через перевод аргументов из СОК в смешанную систему счисления по основаниям .
- Медленные и требующие работы с большими числами реализации алгоритмов перевода из позиционной системы счисления в СОК и обратно.
- Сложные алгоритмы деления (для случая, когда результат не является целым)
- Трудность в обнаружении переполнения
Применение системы остаточных классов
СОК широко используется в микроэлектронике в специализированных устройствах [ЦОС], где требуется:
- контроль за ошибками, за счет введения дополнительных избыточных модулей
- высокая скорость работы, которую обеспечивает параллельная реализация базовых арифметических операций
Специальные системы модулей
В модулярной арифметике существуют специальные наборы модулей, которые позволяют частично нивелировать недостатки и для которых существуют эффективные алгоритмы сравнения чисел и для прямого и обратного перевода модулярных чисел в позиционную систему счисления. Одной из самых популярных систем модулей является набор из трех взаимнопростых чисел вида {2n-1, 2n, 2n+1}
Основные определения
Система остаточных классов используется для представления больших чисел , обеспечивая таким образом более эффективные вычисления. В основе данного представления лежит изоморфизм , который доставляет китайская теорема об остатках.
Системой остаточных классов называют произвольное конечное множество , такое что , где . Пусть задана произвольная система остаточных классов и положим, что . Тогда в силу китайской теоремы об остатках имеем эпиморфизм колец , т.ч. , который индуцирует канонический изоморфизм .
Выполнение арифметических операций
С использованием системы остаточных классов можно выполнять основные арифметические операции.
Сложение и вычитание
Пусть - произвольные натуральные числа. Положим, что представляются в виде системы остаточных классов как и соответственно. Формально, . В силу того, что - изоморфизм будем иметь . Обозначим через остаток от деления на . Тогда представляется в виде системы остаточных классов как .
Умножение
- остаток от деления на . Тогда представляется в виде системы остаточных классов как .
Деление
Деление на с использованием системы остаточных классов можно выполнять не всегда. Положим, что - остаток от деления на . На языке теории колец это означает, что обратим и - обратный. Тогда представляется в виде .
Факторизация полупростых чисел
Пусть - полупростое число. Рассмотрим систему остаточных классов , где — -е простое число.
Численный пример
Пример
Рассмотрим СОК с базисом . В этом базисе можно взаимооднозначно представить числа из промежутка от до , так как . Таблица соответствия чисел из позиционной системы счисления и системы остаточных классов:
Пример сложения
Сложим два числа 9 и 14 в базисе . Их представление в заданном базисе и (см. табличку выше). Воспользуемся формулой для сложения:
- по таблице убеждаемся, что результат равен 23.
Пример умножения
Умножим два числа 4 и 5 в базисе . Их представление в заданном базисе и (см. табличку выше). Воспользуемся формулой для умножения:
- по таблице убеждаемся, что результат равен 20.
Замечание: если бы мы умножали или складывали числа, которые дали в результате умножения число больше или равное , то полученный результат , где - результат операции в позиционной системе счисления.
Пример деления, при условии, что оно делится нацело
Деление может быть выполнено аналогично умножению, но только если делитель делит делимое нацело, без остатка.
Для модулей разделим число 1872 на 9.
Делим на .
Воспользуемся формулой
Здесь надо сказать, что , что не то же самое, что просто разделить x на y.
По формуле получаем
Это и есть правильный результат - число 208. Однако такой результат можно получить только если известно, что деление производится без остатка.
Ссылки
- Книга "Residue Number Systems: Theory and Implementation", Amos Omondi, Benjamin Premkumar - наиболее исчерпывающая информация о применении СОК с подробными примерами (на английском языке).