Skip to main content

Функція Ейлера

Визначення

Функція Ейлера ϕ(n)\phi (n) (інколи позначається як φ(n)\varphi(n) або phi(n){\it phi}(n)) - це кількість чисел від 11 до nn, взаємно простих з nn. Іншими словами, це кількість таких чисел у відрізку [1;n][1; n], для яких найбільший спільний дільник з nn рівний одиниці.

Декілька перших значення цієї функції (A000010 в енциклопедії OEIS):

n123456789101112131415ϕ(n)11224264641041268\begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline n & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ \hline \phi(n) & 1 & 1 & 2 & 2 & 4 & 2 & 6 & 4 & 6 & 4 & 10 & 4 & 12 & 6 & 8 \\ \hline \end{array}

Властивості

Трьох наступних властивостей функції Ейлера достатньо, щоб навчитися обчислювати її для будь-яких чисел:

  • Якщо pp - просте число, то ϕ(p)=p1\phi (p)=p-1.

    Оскільки будь-яке число, крім самого pp, взаємно просте з ним.

  • Якщо pp - просте, aa - натуральне число, то ϕ(pa)=papa1\phi (p^a)=p^a-p^{a-1}.

    Оскільки з числом pap^a не взаємно прості тільки числа виду pkpk (kN)(k \in \mathcal{N}), яких pa/p=pa1p^a / p = p^{a-1} штук.

  • Якщо aa і bb взаємно прості, то ϕ(ab)=ϕ(a)ϕ(b)\phi(ab) = \phi(a) \phi(b) ("мультиплікативність" функції Ейлера).

    Цей факт слідує з китайської теореми про остачі. Розглянемо довільне число zabz \le ab. Позначимо через xx і yy залишки від ділення zz на aa і bb відповідно. Тоді zz взаємно просте з abab тоді і тільки тоді, коли zz взаємно просте з aa і з bb окремо, або, що означає xx взаємно просте з aa, та yy взаємно просте з bb. Застосовуючи китайську теорему про остачі, отримаємо, що будь-якій парі чисел xx і yy (xa, yb)(x \le a, ~ y \le b) взаємно однозначно відповідає число zz (zab)(z \le ab), що і завершує доведення.

Звідси можна отримати функцію Ейлера для будь-якого n\it n через його факторизацію (розкладання nn на прості множники):

якщо

n=p1a1p2a2pkakn = p_1^{a_1} \cdot p_2^{a_2} \cdot \ldots \cdot p_k^{a_k}

(де всі pip_i - прості), то

ϕ(n)=ϕ(p1a1)ϕ(p2a2)ϕ(pkak)=\phi(n) = \phi(p_1^{a_1}) \cdot \phi(p_2^{a_2}) \cdot \ldots \cdot \phi(p_k^{a_k}) =
=(p1a1p1a11)(p2a2p2a21)(pkakpkak1)== (p_1^{a_1} - p_1^{a_1-1}) \cdot (p_2^{a_2} - p_2^{a_2-1}) \cdot \ldots \cdot (p_k^{a_k} - p_k^{a_k-1}) =
=n(11p1)(11p2)(11pk).= n \cdot \left( 1-{1\over p_1} \right) \cdot \left( 1-{1\over p_2} \right) \cdot \ldots \cdot \left( 1-{1\over p_k} \right).

Реалізація

Код, що обчислює функцію Ейлера, факторизуючи число за O(n)O(\sqrt n):

int phi(int n) {
int res = n;
for (int i = 2; i*i <= n; i++) {
if (n % i == 0) {
while (n % i == 0) {
n /= i;
}
res -= res / i;
}
}
if (n > 1) {
res -= res / n;
}
return res;
}

Ключовим моментом при обчисленні функції Ейлера є знаходження факторизації числа nn. Її можна знайти за час, значно менший O(n)O(\sqrt{n}): див. Ефективні алгоритми факторизації.

Застосування

Найважливіша і найвідоміша властивість функції Ейлера виражається у теоремі Ейлера:

aϕ(m)1(modm),a^{\phi(m)} \equiv 1 \pmod m,

де a\it a і m\it m взаємно прості.

Зокрема, коли m\it m просте, теорема Ейлера перетворюється у так звану малу теорему Ферма:

am11(modm)a^{m-1} \equiv 1 \pmod m

Теорема Ейлера достатньо часто зустрічається на практиці, наприклад, див. Обернений елемент в кільці за модулем.

Задачі