Формула Эйлера
Формула Эйлера
Рассмотрим число \(N\geqslant 1\) и все числа в пределах от \(0\) до \(N-1\), взаимно простые с \(N\). Договоримся далее называть такие числа приведённой системой остатков.
Рассмотрим по модулю \(N\) произведение всех остатков приведённой системы:
\[ a_1 a_2 \ldots a_m \equiv_N ??? \]
Выберем произвольный остаток приведённой системы \(a\) и для каждого \(a_i\) выберем такой остаток приведённой системы \(A_i\), для которого выполнено
\[ a_i \equiv_N a A_i \]
Упражнение: поймите, почему для каждого \(i\) такой остаток существует и единственный.
Продолжим рассматривать произведение всех остатков приведённой системы:
\[ a_1 a_2 \ldots a_m \equiv_N (aA_1)(aA_2)\ldots (aA_m) \]
Воспользуемся коммутативностью и ассоциативностью умножения:
\[ a_1 a_2 \ldots a_m \equiv_N a^m A_1 A_2 \ldots A_m \]
Заметим, что все \(A_i\) различны. Поскольку их ровно столько же, сколько и всего остатков приведённой системы, то последовательность всех \(A_i\) является перестановкой последовательности всех \(a_i\).
То есть
\[ a_1 a_2 \ldots a_m \equiv_N a^m (a_1 a_2 \ldots a_m) \]
А учитывая взаимную простоту \(a_i\) и \(N\), получаем
\[ 1 \equiv_N a^m \]
Это сравнение называется формулой Эйлера, а \(m\) — значением функции Эйлера на числе \(N\).
Далее функцию Эйлера мы будем обозначать буквой \(\varphi\).
Итого: если \(a\) и \(N\) взаимно просты, то
\[ a^{\varphi(N)} \equiv_N 1 \]
Полезные следствия
Рассмотрим сравнение
\[ x^{a} \equiv_N A \]
Пусть при этом \(a\) взаимно просто с \(\varphi(N)\) и \(A\) взаимно просто с \(N\).
Допишем к этому сравнению формулу Эйлера (взаимная простота \(x\) и \(N\) следует из таковой для \(A\) и \(N\)):
\[ x^{\varphi(N)} \equiv_N 1 \]
К подобной паре сравнений можно применить мультипликативный алгоритм Евклида. Сейчас мы покажем, как такие сравнения «делить друг на друга с остатком».
Пусть имеется пара сравнений
\[ \begin{aligned} x^{a} & \equiv_N A \\ x^{b} & \equiv_N B \end{aligned} \]
причём \(a = bk + r\). Тогда
\[ x^{a} = (x^{b})^k \cdot x^r \equiv_N A^k x^r \]
То есть мы получили
\[ A^{k-1} x^r \equiv_N 1 \]
откуда можно получить сравнение вида \(x^r \equiv_N C\).
Алгоритм Евклида закончится на сравнении
\[ x \equiv_N \mathfrak{M} \]
Более того, правую часть легко выразить через исходные данные: вместо мультипликативного алгоритма Евклида можно было найти любое решение уравнения
\[ ay + \varphi(N)z = 1 \]
(более того, во многих случаях это ещё и эффективнее с вычислительной точки зрения).
Тогда \(\mathfrak{M} = A^{y}\).
Осталось заметить, что
\[ (A^{y})^a = A^{ay} = A^{ay}\cdot 1 \equiv_N A^{ay}\cdot A^{\varphi(N)z} = A^1 = A \]
Поэтому найденный кандидат на звание решения действительно является решением.
PS Заметим, что именно на подобной схеме основан алгоритм RSA. В вышеиспользуемых обозначениях для двух простых различных чисел \(p\) и \(q\)
- публичным ключом является любое \(a\), взаимно простое с \(\varphi(pq)=(p-1)(q-1)\), и число \(N=pq\)
- приватным ключом является вычисленное по этому \(a\) число \(y\) и также \(N=pq\).
- что шифрование, что дешифровка — возведение в степень, равную первой компоненте пары, составляющей ключ, по модулю второй компоненты этой пары, то есть — по модулю \(N\).
Быстрое вычисление функции Эйлера
Начнём с того, что \(\varphi(1) = 1\) (среди чисел от \(0\) до \(0\) с единицей не взаимно прост этот самый ноль). Но это — бесполезный факт.
Если \(N\) — простое число, то, очевидно
\[ \varphi(N) = N-1 \]
поскольку среди чисел от \(0\) до \(N-1\) с \(N\) не взаимно прост только ноль.
Если \(N=p^k\), где \(p\) — простое число, то
\[ \varphi(N) = p^k - p^{k-1} \]
поскольку с \(p^k\) не взаимно просты числа, кратные \(p\), и только они.
Если же \(N=ab\), где \(a\) и \(b\) взаимно просты, то из КТО следует
\[ \varphi(a\cdot b) = \varphi(a)\cdot\varphi(b) \]
Чуть подробнее: сравнение \(x\equiv_{ab} m\) согласно КТО эквивалентно системе
\[ \begin{aligned} x & \equiv_a A \\ x & \equiv_b B \end{aligned} \]
Нетрудно при этом заметить, что \(m\) в таком соответствии взаимно просто с \(ab\) тогда и только тогда, когда \(A\) взаимно просто с \(a\) и \(B\) взаимно просто с \(b\).