Определение

Функция эйлера записывается как и обозначает количество чисел от 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;
}