欧拉函数与欧拉定理

欧拉函数

定义

我们定义 \(\varphi (x)\) 为 小于 \(x\) 的正整数中与 \(x\)
互质的数的个数,称作欧拉函数。数学方式表达就是

\[\varphi(x) = \sum_{i < x} [i \bot x] \]

但需要注意,我们定义 \(\varphi(1) = 1\) 。

性质

  1. 若 \(x\) 为质数,\(\varphi(x) = x - 1\) 。

    证明:这个很显然了,因为除了质数本身的数都与它互质。

  2. 若 \(x = p^k\) ( \(p\) 为质数, \(x\)
    为单个质数的整数幂),则 \(\varphi(x) = (p - 1) \times p ^ {k - 1}\) 。

    证明:不难发现所有 \(p\) 的倍数都与 \(x\)
    不互质,其他所有数都与它互质。

    \(p\) 的倍数刚好有 \(p^{k-1}\) 个(包括了 \(x\) 本身)。

    那么就有 \(\varphi(x) = p^k - p^{k-1} = (p - 1) \times p^{k- 1}\) 。

  3. 若 \(p, q\) 互质,则有 \(\varphi(p \times q) = \varphi(p) \times \varphi(q)\) ,也就是欧拉函数是个积性函数。

    证明 :

    如果 \(a\) 与 \(p\) 互质 \((a<p)\) , \(b\) 与 \(q\)
    互质 \((b<q)\) , \(c\) 与 \(pq\) 互质 \((c<pq)\) ,则
    \(c\) 与数对 \((a,b)\) 是一一对应关系。由于 \(a\) 的值有
    \(\varphi (p)\) 种可能, \(b\) 的值有 \(\varphi(q)\)
    种可能,则数对 \((a,b)\) 有 \(φ(p)φ(q)\) 种可能,而 \(c\)
    的值有 \(φ(pq)\) 种可能,所以 \(φ(pq)\) 就等于 \(φ(p)φ(q)\)

    具体来说这一条需要 中国剩余定理 以及 完全剩余系
    才能证明,感性理解一下它的思路吧。

  4. 对于一个正整数 \(x\) 的质数幂分解 \(\displaystyle x = {p_1}^{k_1} \times {p_2}^{k_2} \times \cdots \times {p_{n} }^{k_n} = \prod _{i=1}^{n} {p_i}^{k_i}\) 。

    \(\displaystyle \varphi(x) = x \times (1 - \frac{1}{p_1}) \times (1 - \frac{1}{p_2}) \times \cdots \times (1 - \frac{1}{p_n}) = x\prod_{i=1}^{n} (1-\frac{1}{p_i})\)

    证明:

    我们考虑用前几条定理一起来证明。

    \(\begin{aligned} \varphi(x) &= \prod_{i=1}^{n} \varphi(p_i^{k_i}) \\ &= \prod_{i=1}^{n} (p_i-1)\times {p_i}^{k_i-1}\\ &=\prod_{i=1}^{n} {p_i}^{k_i} \times(1-\frac{1}{p_i})\\ &=x \prod_{i=1}^{n} (1-\frac{1}{p_i}) \end{aligned}\)

  5. 若 \(p\) 为 \(x\) 的约数( \(p\) 为质数, \(x\) 为任意正整数),我们有 \(\varphi(x \times p) = \varphi(x) \times p\) 。

    证明:

    我们利用之前的第 \(4\) 个性质来证明就行了。

    不难发现 \(\displaystyle \prod _{i=1}^{n} (1 - \frac{1}{p_i})\) 是不会变的,前面的那个 \(x\) 会变成 \(x \times p\) 。

    所以乘 \(p\) 就行了。

  6. 若 \(p\) 不是 \(x\) 的约数( \(p\) 为质数, \(x\)
    为任意正整数),我们有 \(\varphi(x \times p) = \varphi(x) \times (p - 1)\) 。

    证明 :\(p, x\) 互质,由于 \(\varphi\) 积性直接得到。

求欧拉函数

求解单个欧拉函数

我们考虑质因数分解,然后直接利用之前的性质 \(4\) 来求解。

快速分解的话可以用 \(PollardRho\) 算法。

求解一系列欧拉函数

首先需要学习 线性筛,我们将其改一些地方。

质数 \(p\) 的 \(\varphi(p) = p-1\) 。

对于枚举一个数 \(i\) 和另外一个质数 \(p\) 的积 \(x\) 。

我们在线性筛,把合数筛掉会分两种情况。

  1. \(p\) 不是 \(i\) 的一个约数,由于性质 \(5\) 就有
    \(\varphi(x) = \varphi(i) \times (p - 1)\) 。
  2. \(p\) 是 \(i\) 的一个约数,此时我们会跳出循环,由于性质 \(6\)
    有 \(\varphi(x) = \varphi(i) \times p\) 。

代码实现

bitset<N> is_prime; int prime[N], phi[N], cnt = 0;
void Init(int maxn) {
    is_prime.set(); is_prime[0] = is_prime[1] = false; phi[1] = 1;
    For (i, 2, maxn) {
        if (is_prime[i]) phi[i] = i - 1, prime[++ cnt] = i;
        For (j, 1, cnt) {
            int res = i * prime[j];
            if (res > maxn) break;
            is_prime[res] = false;
            if (i % prime[j]) phi[res] = phi[i] * (prime[j] - 1);
            else { phi[res] = phi[i] * prime[j]; break; }
        }
    }
}

欧拉定理

若正整数 \(a\) 与 \(m\) 互质,则

\(a^{\varphi(m)} \equiv 1\pmod m\)

扩展欧拉定理

\(a^b\equiv \begin{cases} a^{b \bmod \varphi(p)} & a \bot p\\ a^b & a \not \bot p,b<\varphi(p)\\ a^{b \bmod \varphi(p) + \varphi(p)} & a \not \bot p,b\geq\varphi(p) \end{cases} \pmod p\)

证明看 这里,有点难证,记结论吧。

这个常常可以用于降幂这种操作。

上一篇:发布一个参考ssdb,用go实现的类似redis的高性能nosql:ledisdb


下一篇:VS2019安装EasyX详细过程(非常简单,亲测有效)