:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Математика » Быстрые вычисления » Функция Эйлера
  Вычисление функции Эйлера



Функция Эйлера от натурального n есть количество чисел, меньших n и взаимно простых с n (число 1 взаимно просто с любым числом). При этом считается, что.

Если мы попробуем просто проверять все числа, меньшие n, на взаимную простоту с n, то при больших n программа будет работать часами, а то и сутками.

Попробуем посмотреть на задачу внимательнее.

Первое, что мы заметим - это то, что простое число всегда взаимно просто со всеми числами, меньше себя, значит, для простых n,

(1)

Уже легче. Далее можно рассмотреть случай, когда n имеет единственный простой делитель p, повторенный несколько раз, т.е. n=pk (случай, рассмотренный выше, есть частный случай данного, при k=1). Очевидно, что такое число будет взаимно просто со всеми числами, меньше себя, кроме чисел, кратных p. Всего таких чисел pk-pk-1. Таким образом, мы можем обобщить выражение (1) для простых p:

(2)

Заметим еще, что, если некоторые p и q взаимно просты, то число pq будет взаимно просто со всеми числами, меньшими себя, кроме тех, которые кратны хотя бы одному делителю p или хотя бы одному делителю q. Отсюда имеем еще одно свойство функции Эйлера, а именно: для взаимно простых p и q:

(3)

Предположим, что мы разложили n на простые множители и записали в каноническом виде: , где все pi различные простые числа. Тогда, применив (2) и (3), получаем, что

, где p простые,

(4)

Теперь, наконец, мы можем предложить приемлемый алгоритм.

Число n следует разложить на простые множители p1, p2, ..., pk, и представить в каноническом виде. Затем нужно посчитать выражение (4) и выдать его в качестве результата.

Вот, собственно, и все. Программа получается очень простая. Все, что нужно, - то лишь представить n в каноническом виде.

Про разложение числа на множители можно прочитать здесь.