Определение
Функция эйлера записывается как и обозначает количество чисел от 1 до , которые являются взаимнопростыми с n.
Алгоритм подсчета
Для простого числа все просто, . Для степени простого числа чуть посложнее, мы знаем, что невзаимнопросто только с числами, кратными , тогда . Утверждение. Функция Эйлера мультипликативна, то есть , если . Доказательство. Пусть . Тогда всего чисел, невзаимнопростых с - , а с - , тогда число будет невзаимнопростым с , если оно кратно хотя бы одному из этих двух наборов, количество таких чисел: Тогда чтобы посчитать количество взаимнопростых с чисел нам достаточно вычесть прошлое полученное число из : Отлично, теперь чтобы получить функцию Эйлера от любого нам достаточно разложить на простые числа и воспользоваться формулой для них.
Код
long long euler_func(long long x) {
long long ans = 1;
for (long long i = 2; i * i <= x; i++) {
if (x % i == 0) {
long long cnt = 1;
while (x % i == 0) {
cnt *= i;
x /= i;
}
cnt -= cnt / i;
ans *= cnt;
}
}
if (x != 1) {
ans *= x - 1;
}
return ans;
}