|
||||||||||
Математика: Быстрое вычисление функций.Вычисление Функции ЭйлераФункция Эйлера от натурального n есть количество чисел, меньших n и взаимно простых с n (число 1 взаимно просто с любым числом). При этом считается, что. Если мы попробуем просто проверять все числа, меньшие n, на взаимную простоту с n, то при больших n программа будет работать часами, а то и сутками. Попробуем посмотреть на задачу внимательнее. Первое, что мы заметим - это то, что простое число всегда взаимно просто со всеми числами, меньше себя, значит, для простых n,
Уже легче. Далее можно рассмотреть случай, когда n имеет единственный простой делитель p, повторенный несколько раз, т.е. n=pk (случай, рассмотренный выше, есть частный случай данного, при k=1). Очевидно, что такое число будет взаимно просто со всеми числами, меньше себя, кроме чисел, кратных p. Всего таких чисел pk-pk-1. Таким образом, мы можем обобщить выражение (1) для простых p:
Заметим еще, что, если некоторые p и q взаимно просты, то число pq будет взаимно просто со всеми числами, меньшими себя, кроме тех, которые кратны хотя бы одному делителю p или хотя бы одному делителю q. Отсюда имеем еще одно свойство функции Эйлера, а именно: для взаимно простых p и q:
Предположим, что мы разложили n на простые множители и записали в каноническом виде: , где все pi различные простые числа. Тогда, применив (2) и (3), получаем, что , где p простые,
Теперь, наконец, мы можем предложить приемлемый алгоритм. Число n следует разложить на простые множители p1, p2, ..., pk, и представить в каноническом виде. Затем нужно посчитать выражение (4) и выдать его в качестве результата. Вот, собственно, и все. Программа получается очень простая. Все, что нужно, - это лишь представить n в каноническом виде. Про разложение числа на множители можно прочитать здесь. Вверх по странице, к оглавлению и навигации.
|