Documentation

Mathlib.Data.Nat.Factors

Prime numbers #

This file deals with the factors of natural numbers.

Important declarations #

@[irreducible]

primeFactorsList n is the prime factorization of n, listed in increasing order.

Equations
Instances For
    @[deprecated Nat.primeFactorsList]

    Alias of Nat.primeFactorsList.


    primeFactorsList n is the prime factorization of n, listed in increasing order.

    Equations
    Instances For
      @[irreducible]
      theorem Nat.prime_of_mem_primeFactorsList {n : ℕ} {p : ℕ} :
      p ∈ n.primeFactorsList → Nat.Prime p
      theorem Nat.pos_of_mem_primeFactorsList {n : ℕ} {p : ℕ} (h : p ∈ n.primeFactorsList) :
      0 < p
      @[irreducible]
      theorem Nat.prod_primeFactorsList {n : ℕ} :
      n ≠ 0 → n.primeFactorsList.prod = n
      theorem Nat.primeFactorsList_prime {p : ℕ} (hp : Nat.Prime p) :
      p.primeFactorsList = [p]
      @[irreducible]
      theorem Nat.primeFactorsList_chain {n : ℕ} {a : ℕ} :
      (∀ (p : ℕ), Nat.Prime p → p ∣ n → a ≤ p) → List.Chain (fun (x1 x2 : ℕ) => x1 ≤ x2) a n.primeFactorsList
      theorem Nat.primeFactorsList_chain_2 (n : ℕ) :
      List.Chain (fun (x1 x2 : ℕ) => x1 ≤ x2) 2 n.primeFactorsList
      theorem Nat.primeFactorsList_chain' (n : ℕ) :
      List.Chain' (fun (x1 x2 : ℕ) => x1 ≤ x2) n.primeFactorsList
      theorem Nat.primeFactorsList_sorted (n : ℕ) :
      List.Sorted (fun (x1 x2 : ℕ) => x1 ≤ x2) n.primeFactorsList
      theorem Nat.primeFactorsList_add_two (n : ℕ) :
      (n + 2).primeFactorsList = (n + 2).minFac :: ((n + 2) / (n + 2).minFac).primeFactorsList

      primeFactorsList can be constructed inductively by extracting minFac, for sufficiently large n.

      @[simp]
      theorem Nat.primeFactorsList_eq_nil (n : ℕ) :
      n.primeFactorsList = [] ↔ n = 0 ∨ n = 1
      theorem Nat.eq_of_perm_primeFactorsList {a : ℕ} {b : ℕ} (ha : a ≠ 0) (hb : b ≠ 0) (h : a.primeFactorsList.Perm b.primeFactorsList) :
      a = b
      theorem Nat.mem_primeFactorsList_iff_dvd {n : ℕ} {p : ℕ} (hn : n ≠ 0) (hp : Nat.Prime p) :
      p ∈ n.primeFactorsList ↔ p ∣ n
      theorem Nat.dvd_of_mem_primeFactorsList {n : ℕ} {p : ℕ} (h : p ∈ n.primeFactorsList) :
      p ∣ n
      theorem Nat.mem_primeFactorsList {n : ℕ} {p : ℕ} (hn : n ≠ 0) :
      p ∈ n.primeFactorsList ↔ Nat.Prime p ∧ p ∣ n
      @[simp]
      theorem Nat.mem_primeFactorsList' {n : ℕ} {p : ℕ} :
      p ∈ n.primeFactorsList ↔ Nat.Prime p ∧ p ∣ n ∧ n ≠ 0
      theorem Nat.le_of_mem_primeFactorsList {n : ℕ} {p : ℕ} (h : p ∈ n.primeFactorsList) :
      p ≤ n
      theorem Nat.primeFactorsList_unique {n : ℕ} {l : List ℕ} (h₁ : l.prod = n) (h₂ : ∀ p ∈ l, Nat.Prime p) :
      l.Perm n.primeFactorsList

      Fundamental theorem of arithmetic

      theorem Nat.Prime.primeFactorsList_pow {p : ℕ} (hp : Nat.Prime p) (n : ℕ) :
      (p ^ n).primeFactorsList = List.replicate n p
      theorem Nat.eq_prime_pow_of_unique_prime_dvd {n : ℕ} {p : ℕ} (hpos : n ≠ 0) (h : ∀ {d : ℕ}, Nat.Prime d → d ∣ n → d = p) :
      n = p ^ n.primeFactorsList.length
      theorem Nat.perm_primeFactorsList_mul {a : ℕ} {b : ℕ} (ha : a ≠ 0) (hb : b ≠ 0) :
      (a * b).primeFactorsList.Perm (a.primeFactorsList ++ b.primeFactorsList)

      For positive a and b, the prime factors of a * b are the union of those of a and b

      theorem Nat.perm_primeFactorsList_mul_of_coprime {a : ℕ} {b : ℕ} (hab : a.Coprime b) :
      (a * b).primeFactorsList.Perm (a.primeFactorsList ++ b.primeFactorsList)

      For coprime a and b, the prime factors of a * b are the union of those of a and b

      theorem Nat.primeFactorsList_sublist_right {n : ℕ} {k : ℕ} (h : k ≠ 0) :
      n.primeFactorsList.Sublist (n * k).primeFactorsList
      theorem Nat.primeFactorsList_sublist_of_dvd {n : ℕ} {k : ℕ} (h : n ∣ k) (h' : k ≠ 0) :
      n.primeFactorsList.Sublist k.primeFactorsList
      theorem Nat.primeFactorsList_subset_right {n : ℕ} {k : ℕ} (h : k ≠ 0) :
      n.primeFactorsList ⊆ (n * k).primeFactorsList
      theorem Nat.primeFactorsList_subset_of_dvd {n : ℕ} {k : ℕ} (h : n ∣ k) (h' : k ≠ 0) :
      n.primeFactorsList ⊆ k.primeFactorsList
      theorem Nat.dvd_of_primeFactorsList_subperm {a : ℕ} {b : ℕ} (ha : a ≠ 0) (h : a.primeFactorsList.Subperm b.primeFactorsList) :
      a ∣ b
      theorem Nat.replicate_subperm_primeFactorsList_iff {a : ℕ} {b : ℕ} {n : ℕ} (ha : Nat.Prime a) (hb : b ≠ 0) :
      (List.replicate n a).Subperm b.primeFactorsList ↔ a ^ n ∣ b
      theorem Nat.mem_primeFactorsList_mul {a : ℕ} {b : ℕ} (ha : a ≠ 0) (hb : b ≠ 0) {p : ℕ} :
      p ∈ (a * b).primeFactorsList ↔ p ∈ a.primeFactorsList ∨ p ∈ b.primeFactorsList
      theorem Nat.coprime_primeFactorsList_disjoint {a : ℕ} {b : ℕ} (hab : a.Coprime b) :
      a.primeFactorsList.Disjoint b.primeFactorsList

      The sets of factors of coprime a and b are disjoint

      theorem Nat.mem_primeFactorsList_mul_of_coprime {a : ℕ} {b : ℕ} (hab : a.Coprime b) (p : ℕ) :
      p ∈ (a * b).primeFactorsList ↔ p ∈ a.primeFactorsList ∪ b.primeFactorsList
      theorem Nat.mem_primeFactorsList_mul_left {p : ℕ} {a : ℕ} {b : ℕ} (hpa : p ∈ a.primeFactorsList) (hb : b ≠ 0) :
      p ∈ (a * b).primeFactorsList

      If p is a prime factor of a then p is also a prime factor of a * b for any b > 0

      theorem Nat.mem_primeFactorsList_mul_right {p : ℕ} {a : ℕ} {b : ℕ} (hpb : p ∈ b.primeFactorsList) (ha : a ≠ 0) :
      p ∈ (a * b).primeFactorsList

      If p is a prime factor of b then p is also a prime factor of a * b for any a > 0

      theorem Nat.eq_two_pow_or_exists_odd_prime_and_dvd (n : ℕ) :
      (∃ (k : ℕ), n = 2 ^ k) ∨ ∃ (p : ℕ), Nat.Prime p ∧ p ∣ n ∧ Odd p