Documentation

Mathlib.Data.Nat.Totient

Euler's totient function #

This file defines Euler's totient function Nat.totient n which counts the number of naturals less than n that are coprime with n. We prove the divisor sum formula, namely that n equals φ summed over the divisors of n. See sum_totient. We also prove two lemmas to help compute totients, namely totient_mul and totient_prime_pow.

def Nat.totient (n : ) :

Euler's totient function. This counts the number of naturals strictly less than n which are coprime with n.

Equations
Instances For

    Euler's totient function. This counts the number of naturals strictly less than n which are coprime with n.

    Equations
    Instances For
      @[simp]
      @[simp]

      A characterisation of Nat.totient that avoids Finset.

      theorem Nat.totient_lt (n : ) (hn : 1 < n) :
      theorem Nat.totient_pos {n : } :
      0 < n0 < Nat.totient n
      theorem Nat.Ico_filter_coprime_le {a : } (k : ) (n : ) (a_pos : 0 < a) :
      (Finset.filter (Nat.Coprime a) (Finset.Ico k (k + n))).card Nat.totient a * (n / a + 1)
      @[simp]

      Note this takes an explicit Fintype ((ZMod n)ˣ) argument to avoid trouble with instance diamonds.

      theorem Nat.totient_even {n : } (hn : 2 < n) :
      theorem Nat.totient_mul {m : } {n : } (h : Nat.Coprime m n) :
      theorem Nat.totient_div_of_dvd {n : } {d : } (hnd : d n) :
      Nat.totient (n / d) = (Finset.filter (fun (k : ) => Nat.gcd n k = d) (Finset.range n)).card

      For d ∣ n, the totient of n/d equals the number of values k < n such that gcd n k = d

      theorem Nat.sum_totient' (n : ) :
      (Finset.sum (Finset.filter (fun (x : ) => x n) (Finset.range (Nat.succ n))) fun (m : ) => Nat.totient m) = n
      theorem Nat.totient_prime_pow_succ {p : } (hp : Nat.Prime p) (n : ) :
      Nat.totient (p ^ (n + 1)) = p ^ n * (p - 1)

      When p is prime, then the totient of p ^ (n + 1) is p ^ n * (p - 1)

      theorem Nat.totient_prime_pow {p : } (hp : Nat.Prime p) {n : } (hn : 0 < n) :
      Nat.totient (p ^ n) = p ^ (n - 1) * (p - 1)

      When p is prime, then the totient of p ^ n is p ^ (n - 1) * (p - 1)

      theorem Nat.totient_prime {p : } (hp : Nat.Prime p) :
      theorem Nat.totient_eq_iff_prime {p : } (hp : 0 < p) :
      @[simp]
      theorem Nat.totient_eq_one_iff {n : } :
      Nat.totient n = 1 n = 1 n = 2
      theorem Nat.dvd_two_of_totient_le_one {a : } (han : 0 < a) (ha : Nat.totient a 1) :
      a 2

      Euler's product formula for the totient function #

      We prove several different statements of this formula.

      theorem Nat.totient_eq_prod_factorization {n : } (hn : n 0) :
      Nat.totient n = Finsupp.prod (Nat.factorization n) fun (p k : ) => p ^ (k - 1) * (p - 1)

      Euler's product formula for the totient function.

      theorem Nat.totient_mul_prod_primeFactors (n : ) :
      (Nat.totient n * Finset.prod n.primeFactors fun (p : ) => p) = n * Finset.prod n.primeFactors fun (p : ) => p - 1

      Euler's product formula for the totient function.

      theorem Nat.totient_eq_div_primeFactors_mul (n : ) :
      Nat.totient n = (n / Finset.prod n.primeFactors fun (p : ) => p) * Finset.prod n.primeFactors fun (p : ) => p - 1

      Euler's product formula for the totient function.

      theorem Nat.totient_eq_mul_prod_factors (n : ) :
      (Nat.totient n) = n * Finset.prod n.primeFactors fun (p : ) => 1 - (p)⁻¹

      Euler's product formula for the totient function.

      theorem Nat.totient_mul_of_prime_of_dvd {p : } {n : } (hp : Nat.Prime p) (h : p n) :
      theorem Nat.totient_mul_of_prime_of_not_dvd {p : } {n : } (hp : Nat.Prime p) (h : ¬p n) :
      Nat.totient (p * n) = (p - 1) * Nat.totient n