Раскрытие волшебства функции Эйлера: полное руководство по подсчету взаимно простых целых чисел

Вы когда-нибудь сталкивались с математической функцией, которая выглядела так, будто она взята прямо из книги заклинаний волшебника? Что ж, функция Тотиента Эйлера — одна из таких очаровательных концепций! В этой статье мы рассмотрим эту замечательную функцию, раскроем ее внутреннюю работу и предоставим вам несколько методов для ее реализации в вашем коде. Итак, пристегните ремни и приготовьтесь раскрыть магию функции Тотиент Эйлера!

Что такое функция тотента Эйлера?
Функция тотиента Эйлера, обозначаемая как φ(n), представляет собой математическую функцию, которая подсчитывает количество натуральных чисел, взаимно простых с заданным положительным целым числом n. Другими словами, он вычисляет количество целых чисел от 1 до n, которые не имеют общих делителей с n (кроме 1).

Метод 1: подход грубой силы
Давайте начнем с простого, хотя и менее эффективного подхода. Мы можем перебрать все числа от 1 до n и проверить, взаимно ли они просты с n, используя алгоритм Евклида. Вот реализация Python:

def euler_totient_brute_force(n):
    count = 0
    for i in range(1, n+1):
        if math.gcd(i, n) == 1:
            count += 1
    return count

Метод 2: факторизация простых чисел
Другой метод расчета функции тотента Эйлера — использование факторизации простых чисел. Мы можем выразить n как произведение его простых множителей и использовать формулу:

φ(n) = n (1 – 1/p1)(1 – 1/p2) (1 – 1/pk)

где p1, p2, …, pk — отдельные простые делители числа n. Вот пример кода:

def euler_totient_prime_factorization(n):
    result = n
    for p in range(2, int(math.sqrt(n)) + 1):
        if n % p == 0:
            while n % p == 0:
                n //= p
            result *= (1.0 - (1.0 / p))
    if n > 1:
        result *= (1.0 - (1.0 / n))
    return int(result)

Метод 3: формула произведения Эйлера
Формула произведения Эйлера — еще один элегантный метод вычисления φ(n). Он использует тот факт, что φ(n) является мультипликативной функцией, а это означает, что φ(m n) = φ(m)φ(n), если m и n взаимно просты. Вот реализация Python:

def euler_totient_product_formula(n):
    result = n
    p = 2
    while p * p <= n:
        if n % p == 0:
            while n % p == 0:
                n //= p
            result -= result // p
        p += 1
    if n > 1:
        result -= result // n
    return result

Функция тотиента Эйлера — мощный инструмент в теории чисел, который позволяет нам подсчитать количество взаимно простых целых чисел с заданным числом. В этой статье мы исследовали три различных метода расчета φ(n): метод грубой силы, факторизацию простых чисел и формулу произведения Эйлера. Каждый метод имеет свои преимущества и варианты использования, поэтому выберите тот, который лучше всего соответствует вашим потребностям. Теперь, когда в вашем распоряжении есть эти методы, раскройте магию функции Тотиент Эйлера в своем собственном коде!