Числа Мерсенна и Ферма — различия между версиями
Isaeva (обсуждение | вклад) |
Isaeva (обсуждение | вклад) |
||
Строка 93: | Строка 93: | ||
Поэтому <math>{\alpha}_j</math> вычисляются путём сложения <math>e_j</math>-битовых чисел <math>{a_t \oplus a_{t-1} \oplus \ldots \oplus a_1 \oplus a_0} \pmod{2^{e_j}-1}</math>. | Поэтому <math>{\alpha}_j</math> вычисляются путём сложения <math>e_j</math>-битовых чисел <math>{a_t \oplus a_{t-1} \oplus \ldots \oplus a_1 \oplus a_0} \pmod{2^{e_j}-1}</math>. | ||
− | 3. Обратное преобразование для чисел Мерсенна. | + | 3. Обратное преобразование для чисел Мерсенна. Алгоритм Гарнера. |
− | Обратный переход от СОК к позиционной системе счисления несколько сложнее. | + | Обратный переход от СОК к позиционной системе счисления несколько сложнее. Алгоритм, основанный на китайской теореме об остатках требует вычисления значение функции Эйлера для вычислении обратных мультипликативных элементов, что в общем случае требует факторизации, т.е. разложения чисел <math>p_j</math> на простые множители. Даже это показывает, что обратное преобразование чисел из СОК в позиционную систему счисления в соответствии с этим алгоритмом требует большого числа вычислительных операций с высокой точностью. |
− | + | Алгоритм перехода от <math>{\alpha}_1, {\alpha}_2, \cdots, {\alpha}_n</math> к <math>A</math>, пригодный для практического применения, основан на доказательстве китайской теоремы об остатках, предложенном в 1958 г. Х. Л. Гарнером. Оно основано на использовании <math>{C}_n^k</math> констант <math>c_{ij} (1 \le i \le j \le k)</math>, где | |
− | :<math>c_{ | + | |
+ | :<math>c_{ij} \equiv 1 \pmod{p_j}</math>, (3) | ||
+ | |||
+ | , т.е. | ||
+ | |||
+ | :<math>c_{ij} = p_i^{-1} \pmod{p_j}</math>. | ||
+ | |||
+ | |||
+ | '''Алгоритм Гарнера''' | ||
+ | |||
+ | Рассмотрим набор модулей <math>(p_1, p_2, \dots, p_n)</math>, удовлетворяющих условию китайской теоремы об остатках. Любое число <math>0 \leqslant x < M = a_1\cdot a_2 \cdot\ldots\cdot a_n</math> однозначно представимо в виде | ||
+ | |||
+ | <math>x = x_1 + x_2\cdot p_1 + x_3\cdot p_1\cdot p_2 + \dots + x_n\cdot p_1\cdot p_2\cdot\ldots\cdot p_{n-1}</math>. | ||
+ | |||
+ | Вычислив по порядку все коэффициенты <math>x_i</math> для <math>i \in \{1, 2, \dots, n\}</math>, можно подставить их в формулу и найти искомое решение: | ||
+ | |||
+ | Рассмотрим выражение для <math>x</math> по модулю <math>p_i</math>, где <math>i\in \{2, \dots, n\}</math>, получим: | ||
+ | |||
+ | <math>x_1 = r_1</math>; | ||
+ | |||
+ | <math>r_2 = (x_1 + x_2\cdot p_1) \pmod{p_2}</math>; | ||
+ | |||
+ | <math>x_2 = (r_2 - x_1)\cdot c_{12} \pmod{p_2}</math>; | ||
+ | |||
+ | <math>r_3 = (x_1 + x_2\cdot p_1 + x_3\cdot p_1\cdot p_2) \pmod{p_3}</math>; | ||
+ | |||
+ | <math>x_3 = ((r_3 - x_1)\cdot c_{13} - x_2)\cdot c_{23} \pmod{p_3}</math> | ||
+ | |||
+ | и так далее. | ||
+ | |||
+ | Основное преимущество алгоритма Гарнера заключается в том, что вычисления производятся с числами, не превышающими величину модуля M. |
Версия 12:47, 29 декабря 2014
При рассмотрении отдельных классов простых чисел значительный интерес представляет вопрос о простых числах специального вида, например, числа Мерсенна или числа Ферма.
Определение
Числа Мерсенна — числа вида , где
— натуральное число.
Названы в честь французского математика Марена Мерсенна.
Иногда числами Мерсенна называют только числа с нечетными или простыми индексами n.
Множества простых чисел в этих последовательностях совпадают, а потому понятие простого числа Мерсенна не зависит от того, как именно определяются числа Мерсенна.
При простых значениях n = p число может оказаться простым, но может быть составным.
Например, при мы получаем простые числа Мерсенна:
, а при
числа
- составные.
Свойства чисел Мерсенна
- Если
является простым, то число n также простое. Обратное в общем случае неверно, наименьшим контрпримером является
.
- Любой делитель числа
для простого p имеет вид 2pk+1, где k — натуральное число (следствие малой теоремы Ферма).
Числа Мерсенна получили известность в связи с эффективным тестом простоты Люка — Лемера, благодаря которому простые числа Мерсенна давно удерживают лидерство как самые большие известные простые числа.
Определение
Числа Ферма — числа вида , где n — неотрицательное целое число.
При числа Ферма простые:
.
Все числа Мерсенна и Ферма – взаимно простые.
Необходимо отметить, что значения чисел Мерсенна и Ферма быстро растут. Это не позволяет только такими числами в качестве модулей СОК.
Операции над числами Мерсенна и Ферма
1. Если в качестве модулей выбраны числа Мерсенна, т.е. числа вида
, для которых значение модуля на единицу меньше очередной степени двойки, это зачастую упрощает выполнение основных арифметических операций, так как выполнять вычисления с числами в таком представлении несколько проще, чем с числами, представленными в обратном коде.
При таком выборе модулей полезно несколько ослабить условие и потребовать только чтобы
. (1)
Таким образом, значение принимается в качестве оптимального вместо
, поскольку это, с одной стороны, не влияет на справедливость китайской теоремы об остатках, а с другой означает, что math>{\alpha}_j</math> может быть любым math>{\alpha}_j</math>- битовым двоичным числом. При таком допущении, операции сложения и вычитания по модулю
выполняются следующим образом:
,
.
Здесь и
указывают на действия, которые с учётом условия (1) должны быть выполнены с отдельными компонентами кортежей
и
при сложении или умножении соответственно. При вычитании можно пользоваться и соотношением:
.
Эти операции могут быть эффективно выполнены, даже если больше машинного слова компьютера, так как совсем просто вычислить остаток положительного числа по модулю степени 2 или разложить число по степеням 2. Для работы с модулями вида
необходимо знать, при каких условиях число
является взаимно простым с числом
. Для этого существует простое правило:
. (2)
Формула (2) утверждает, в частности, что
.
Уравнение (2) следует из алгоритма Евклида и тождества
.
Поэтому на компьютере с длиной слова можно выбрать
,
что обеспечивает эффективность сложения, вычитания и умножения целых чисел в интервале вплоть до .
2. Прямое преобразование для чисел Мерсенна
Модулярное представление для заданного числа
может быть получено посредством деления
на
с запоминанием остатков. В случае, когда
, возможно применение более подходящего способа, который состоит в том, чтобы, используя СОК, вычислить полином
.
Если основание и модули
имеют вид
, оба подхода сводятся к совсем простому способу.
Рассмотрим двоичные представления числа с блоками по
бит:
,
где и
при
.
Тогда , поскольку
.
Поэтому вычисляются путём сложения
-битовых чисел
.
3. Обратное преобразование для чисел Мерсенна. Алгоритм Гарнера.
Обратный переход от СОК к позиционной системе счисления несколько сложнее. Алгоритм, основанный на китайской теореме об остатках требует вычисления значение функции Эйлера для вычислении обратных мультипликативных элементов, что в общем случае требует факторизации, т.е. разложения чисел на простые множители. Даже это показывает, что обратное преобразование чисел из СОК в позиционную систему счисления в соответствии с этим алгоритмом требует большого числа вычислительных операций с высокой точностью.
Алгоритм перехода от
к
, пригодный для практического применения, основан на доказательстве китайской теоремы об остатках, предложенном в 1958 г. Х. Л. Гарнером. Оно основано на использовании
констант
, где
, (3)
, т.е.
.
Алгоритм Гарнера
Рассмотрим набор модулей , удовлетворяющих условию китайской теоремы об остатках. Любое число
однозначно представимо в виде
.
Вычислив по порядку все коэффициенты для
, можно подставить их в формулу и найти искомое решение:
Рассмотрим выражение для по модулю
, где
, получим:
;
;
;
;
и так далее.
Основное преимущество алгоритма Гарнера заключается в том, что вычисления производятся с числами, не превышающими величину модуля M.