核心概述

欧拉函数 φ(n):统计 1..n 中与 n 互质的个数;可由因子分解式 n·∏(1−1/p) 单点计算,或用线性筛在 O(N) 批量预处理。

原文引述

Description: Euler’s totient φ(n) counts integers ≤ n that are coprime to n. Multiplicative with φ(p^k)=p^k−p^{k−1}. Compute by factoring n or via linear sieve for 1..N. Time: Single n via factoring ~ O(∑ log p); sieve O(N)

展开阐述

  • 函数/接口(据实现)

    • long long phi(long long n):对单点 n,先分解 n 的质因子集合 {p},返回 n·∏(1−1/p)。
    • vector phiSieve(int N):线性筛返回 1..N 的 φ 值数组(同时可产出 primes)。
    • 可选:long long coprimeCountUpTo(long long n, long long m):统计 ≤m 与 n 互质个数(用容斥按 n 的不同质因子)。
  • 单点算法(因子分解式)

    1. ans ← n。
    2. 枚举 n 的不同质因子 p:ans = ans / p * (p − 1)。
    3. 返回 ans。分解可用试除、spf、或 084-数论-因数分解(Rho+MR)。
    • 说明:仅对“不同”的质因子做一次更新。
  • 批量算法(线性筛 φ)

    • 维护 primes 与 phi 数组:
      • phi[1]=1。
      • 对 i=2..N:
        • 若 i 为新质数 p:primes.push_back(p),phi[i]=i−1。
        • 对每个 p∈primes:
          • 若 i·p>N 终止。
          • 若 p | i:phi[i·p]=phi[i]*p;break。
          • 否则(p ∤ i):phi[i·p]=phi[i]*(p−1)。
    • 复杂度 O(N),适合多次查询或需要前缀和。
  • 常用恒等式与应用

    • ∑_{d|n} φ(d) = n(约数和恒等式)。
    • 与幂/模运算:a^{φ(m)}≡1 (mod m) 当 gcd(a,m)=1(欧拉定理;素数模退化为费马小定理)。
    • 计数应用:循环节长度、互质对计数、分数最简化个数等。
  • 输出语义

    • phi(n):返回与 n 互质的个数。
    • phiSieve(N)[x]:1..N 的 φ(x)。
  • 复杂度

    • 单点:因子分解主导;用试除 O(√n),用 Rho 对 64 位通常毫秒级。
    • 批量:线性筛 O(N) 时间、O(N) 空间。
  • 使用与注意

关联节点