数论专题-学习笔记:欧拉定理与扩展欧拉定理

1. 前言

欧拉定理与扩展欧拉定理,是数论中的一个很重要的定理。

该定理可以将形如 \(a^b\) 的式子的指数降得很低,通常可以降到 \(\log b\) 可接受范围内,这样就可以用快速幂计算了。

若无特殊说明,本文所有数都是正整数。

一些符号说明:

  • \(\varphi(n)\)欧拉函数
  • \(a \equiv b \bmod c\) 表示 \(a,b\)\(c\) 的值相等,这个式子叫做同余式

2. 前置知识

费马小定理:若 \(m\) 为质数并且 \(m \nmid a\),则 \(a^{m-1} \equiv 1 \bmod m\)

3. 欧拉定理

3.1 描述

欧拉定理描述如下:

\(\gcd(a,m)=1\),则 \(a^{\varphi(m)} \equiv 1 \bmod m\)

结合上面的费马小定理可以发现,费马小定理实际上就是欧拉定理的一种特殊情况。

3.2 证明

\(x_1,x_2,...,x_{\varphi(m)}\)\(\varphi(m)\) 个与 \(m\) 互质的数。

\(p_i=ax_i\)

下面若无特殊说明,同余式均对 \(m\) 取模。


引理 1:\(\forall i,j \in[1,\varphi(m)],p_i \not \equiv p_j,x_i \not \equiv x_j\)

证明如下:首先因为所有 \(x_i<m\),那么必然有 \(x_i \not \equiv x_j\)

接下来反证法,假设 \(p_i \equiv p_j\)

那么有 \(p_i - p_j \equiv 0\)

\(a(x_i-x_j) \equiv 0\)

但是 \(\gcd(a,m)=1\),因此 \(m \mid x_i-x_j\)。但是 \(x_i-x_j \not = 0\) 且小于 \(m\),矛盾。

综上引理 1 成立。


引理 2:所有 \(p\)\(m\) 的结果都与 \(m\) 互质。

证明如下:

还是反证法。

\(p_i=ax_i=km+r\),即除以 \(m\),那么有 \(\gcd(r,m)>1\)

整理得 \(x_i=\dfrac{km+r}{a}\)

因为 \(x_i\) 是个正整数,所以 \(\gcd(a,km,r)=a\)

所以 \(\gcd(a,r)=a\)

然而 \(\gcd(a,m)=1\),因此只有 \(\gcd(a,km)=a\) 才能够做到 \(\gcd(a,km,r)=a\)

所以 \(k=a\)

但是因为 \(p_i=ax_i\),因此就要有 \(x_i=m\)\(r=0\),显然与假设矛盾,因此原假设错误。

综上,引理 2 成立。


有了这两个引理之后,我们就可以证明欧拉定理了。

由引理 2,所有 \(p\)\(m\) 的结果都与 \(m\) 互质。

由引理 1,任意两个 \(p\) 之间模 \(m\) 不同余,任意两个 \(x\) 之间模 \(m\) 不同余。

因此我们可以得到所有 \(p\)\(m\) 的结果组成的集合与 \(x\)\(m\) 的结果组成的集合是相同的。

因此我们就有 \(\prod\limits_{i=1}^{\varphi(m)}p_i \equiv \prod\limits_{i=1}^{\varphi(m)}x_i\)

同余式的基本性质,约去 \(\prod x_i\),我们可以得到 \(a^{\varphi(m)}\equiv 1\)

综上,欧拉定理成立。

4. 扩展欧拉定理

4.1 描述

扩展欧拉定理是欧拉定理的扩展,该定理将欧拉定理扩展到了 \(\gcd(a,m)\) 为任意数的情况。

其描述如下(均对 \(m\) 取模):

\(a^b \equiv \begin{cases}a^{b \bmod \varphi(m)}&\gcd(a,m)=1\\a^b&\gcd(a,m)\ne1,b \leq\varphi(m)\\a^{(b \bmod \varphi(m))+\varphi(m)}&\gcd(a,m)\ne1,b>\varphi(m)\end{cases}\)

4.2 证明

下面同余式无说明均对 \(m\) 取模。


\(a^b \equiv a^{b \bmod \varphi(m)},\gcd(a,m)=1\)

这个还是比较简单的。

由欧拉定理,\(a^{\varphi(m)} \equiv 1\),因此实际上我们两遍同时除以 \(a^{\varphi(m)}\) 是可行的。

因此原式得证。


\(a^b \equiv a^b,\gcd(a,m) \ne1,b \leq \varphi(m)\)

啊不是这还需要证明吗qwq


\(a^b \equiv a^{(b \bmod \varphi(m)) + \varphi(m)},\gcd(a,m) \ne 1,b > \varphi(m)\)

首先对 \(a\) 做一个质因数分解 \(a=\prod_{i=1}^{k}p_i^{r_i}\)

因此根据同余式可以同乘的性质,我们的目标变成了证明 \(a=p_i^{r_i}\) 时上式成立。

显然 \(p_i^{r_i}\) 也是可以由 \(r_i\)\(p_i\) 同乘的,因此我们的最终目的变成了证明当 \(a\) 是个质数的时候上式成立。

接下来的证明都只考虑 \(a\) 为质数。

考虑引入一个数 \(s\)\(a\) 互质,令 \(m=s \times a^c,c \leq \varphi(m)\)

  • 实际上 \(c \leq \varphi(m)\) 是必定成立的,因为总共与 \(m\) 互质的数有 \(\varphi(m)\) 个,而且\(\varphi(m)=\varphi(s) \times \varphi(a^c)=\varphi(s) \times c,\varphi(s) \geq 1\),因此有 \(c \leq \varphi(m)\)

根据欧拉定理,有 \(a^{\varphi(s)} \equiv 1 \bmod s\)

因为 \(\gcd(s,a)=1\),根据欧拉函数的下面这条性质:

  • \(n \in N_+,p\) 为质数,那么:

    \[\varphi(n \times p)=\begin{cases}\varphi(n) \times \varphi(p)&p \nmid n\\\varphi(n) \times p&p \mid n\end{cases} \]

我们可以得到 \(\varphi(s) \mid \varphi(m)\)

因此有 \(a^{\varphi(m)} =a^{\varphi(s) \times \frac{\varphi(m)}{\varphi(s)}}\equiv 1 \bmod s\)

两遍同乘以 \(a^c\)(注意模数变成了 \(m\)),有 \(a^{\varphi(m)+c} \equiv a^{c}\)

于是 \(a^b=a^{b-c+c} =a^c \times a^{b-c}\equiv a^{\varphi(m)+b},b \geq c\)

因为任意 \(c \leq \varphi(m)\) 上式都成立,因此有 \(a^b \equiv a^{\varphi(m)+b}\)

上式等价于 \(a^b \equiv a^{(b \bmod \varphi(m))+\varphi(m)}\)

因此我们成功的证明了 \(a\) 是个质数的时候原式成立。

那么根据我们一开始的理论,可以证出原式对于任意 \(a\) 都成立。


综上,扩展欧拉定理成立。

4.3 辅助说明

扩展欧拉定理:

\(a^b \equiv \begin{cases}a^{b \bmod \varphi(m)}&\gcd(a,m)=1\\a^b&\gcd(a,m)\ne1,b \leq\varphi(m)\\a^{(b \bmod \varphi(m))+\varphi(m)}&\gcd(a,m)\ne1,b>\varphi(m)\end{cases}\)


首先观察一下第一个式子和第三个式子。

我们发现实际上这两个式子对于 \(b>\varphi(m)\) 的时候是等价的。

因此一般做题的时候我们不需要记第一个式子,只记第二个和第三个式子就好。

对于 \(b>\varphi(m)\) 的情况刚刚已经说过第一个式子与第二个式子等价。

对于 \(b \leq \varphi(m)\) 的情况因为 \(a^b=a^b\) 恒成立(难道不是吗),所以第一个式子和第二个式子等价。

当然如果出现了 \(\gcd(a,m)=1\) 的情况实际上我们可以直接用欧拉定理即可。


或许有的人问了:对于第二个式子 \(a^b \equiv a^b,\gcd(a,m) \ne 1,b \leq \varphi(m)\),为什么其不等价于第三个式子?

解释如下:

首先因为 \(\gcd(a,m) \ne 1\),我们知道欧拉定理不成立,也就是 \(a^{\varphi(m)} \not \equiv 1\)

因此对第三个式子做一个拆分:\(a^b \equiv a^{b \bmod \varphi(m)} \times a^{\varphi(m)}\)

我们发现因为 \(a^{\varphi(m)} \not \equiv 1\),因此我们不能在第二个式子两边同时乘以 \(a^{\varphi(m)}\)

至于第三个式子可以其实是因为需要将 \(b\) 拆掉,这个时候需要 \(b > \varphi(m)\)

4.4 例题

例题:P5091 【模板】扩展欧拉定理

扩展欧拉定理板子题。

特别需要注意 \(b \leq \varphi(m)\) 的情况,此种情况 \(b\) 不能加上 \(\varphi(m)\)

代码:

/*
========= Plozia =========
    Author:Plozia
    Problem:P5091 【模板】扩展欧拉定理
    Date:2021/5/19
========= Plozia =========
*/

#include <bits/stdc++.h>

typedef long long LL;
// const int MAXN = ;
LL a, b, m, phi = 1;
bool flag = 0;

LL read()
{
    LL sum = 0, fh = 1; char ch = getchar();
    for (; ch < '0' || ch > '9'; ch = getchar()) fh -= (ch == '-') << 1;
    for (; ch >= '0' && ch <= '9'; ch = getchar()) sum = (sum << 3) + (sum << 1) + (ch ^ 48);
    return sum * fh;
}

LL Specail_read()
{
    LL sum = 0, fh = 1; char ch = getchar();
    for (; ch < '0' || ch > '9'; ch = getchar()) fh -= (ch == '-') << 1;
    for (; ch >= '0' && ch <= '9'; ch = getchar())
    {
        sum = sum * 10ll + ch - '0';
        if (sum > phi) { sum %= phi; flag = 1; }
    }
    return sum * fh;
}

LL ksm(LL fir, LL sec, LL p)
{
    LL ans = 1 % p;
    for (; sec; sec >>= 1, fir = fir * fir % p)
        if (sec & 1) ans = ans * fir % p;
    return ans;
}

void Get_phi()
{
    int i, c = m;
    for (i = 2; i * i <= c; ++i)
    {
        int sum = 0;
        while (c % i == 0) { ++sum; c /= i; }
        if (sum != 0) phi *= (LL)(i - 1) * ksm(i, sum - 1, m);
    }
    if (c != 1) phi *= (c - 1);
}

int main()
{
    a = read(), m = read(); Get_phi();
    b = Specail_read();
    if (flag) b += phi;
    printf("%lld\n", ksm(a, b, m));
    return 0;
}

5. 总结

扩展欧拉定理:

\(a^b \equiv \begin{cases}a^{b \bmod \varphi(m)}&\gcd(a,m)=1\\a^b&\gcd(a,m)\ne1,b \leq\varphi(m)\\a^{(b \bmod \varphi(m))+\varphi(m)}&\gcd(a,m)\ne1,b>\varphi(m)\end{cases}\)

posted @ 2022-04-17 15:53  Plozia  阅读(374)  评论(0编辑  收藏  举报