1. 前言
欧拉定理与扩展欧拉定理,是数论中的一个很重要的定理。
该定理可以将形如 a b a^b ab 的式子的指数降得很低,通常可以降到 log b \log b logb 可接受范围内,这样就可以用快速幂计算了。
若无特殊说明,本文所有数都是正整数。
一些符号说明:
- φ ( n ) \varphi(n) φ(n) 为欧拉函数。
- a ≡ b m o d c a \equiv b \bmod c a≡bmodc 表示 a , b a,b a,b 模 c c c 的值相等,这个式子叫做同余式。
2. 前置知识
费马小定理:若 m m m 为质数并且 m ∤ a m \nmid a m∤a,则 a m − 1 ≡ 1 m o d m a^{m-1} \equiv 1 \bmod m am−1≡1modm。
3. 欧拉定理
3.1 描述
欧拉定理描述如下:
若 gcd ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1,则 a φ ( m ) ≡ 1 m o d m a^{\varphi(m)} \equiv 1 \bmod m aφ(m)≡1modm。
结合上面的费马小定理可以发现,费马小定理实际上就是欧拉定理的一种特殊情况。
3.2 证明
设 x 1 , x 2 , . . . , x φ ( m ) x_1,x_2,...,x_{\varphi(m)} x1,x2,...,xφ(m) 为 φ ( m ) \varphi(m) φ(m) 个与 m m m 互质的数。
令 p i = a x i p_i=ax_i pi=axi。
下面若无特殊说明,同余式均对 m m m 取模。
引理 1: ∀ i , j ∈ [ 1 , φ ( m ) ] , p i ≢ p j , x i ≢ x j \forall i,j \in[1,\varphi(m)],p_i \not \equiv p_j,x_i \not \equiv x_j ∀i,j∈[1,φ(m)],pi≡pj,xi≡xj。
证明如下:首先因为所有 x i < m x_i<m xi<m,那么必然有 x i ≢ x j x_i \not \equiv x_j xi≡xj。
接下来反证法,假设 p i ≡ p j p_i \equiv p_j pi≡pj。
那么有 p i − p j ≡ 0 p_i - p_j \equiv 0 pi−pj≡0。
则 a ( x i − x j ) ≡ 0 a(x_i-x_j) \equiv 0 a(xi−xj)≡0。
但是 gcd ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1,因此 m ∣ x i − x j m \mid x_i-x_j m∣xi−xj。但是 x i − x j ≠ 0 x_i-x_j \not = 0 xi−xj=0 且小于 m m m,矛盾。
综上引理 1 成立。
引理 2:所有 p p p 模 m m m 的结果都与 m m m 互质。
证明如下:
还是反证法。
设 p i = a x i = k m + r p_i=ax_i=km+r pi=axi=km+r,即除以 m m m,那么有 gcd ( r , m ) > 1 \gcd(r,m)>1 gcd(r,m)>1。
整理得 x i = k m + r a x_i=\dfrac{km+r}{a} xi=akm+r。
因为 x i x_i xi 是个正整数,所以 gcd ( a , k m , r ) = a \gcd(a,km,r)=a gcd(a,km,r)=a。
所以 gcd ( a , r ) = a \gcd(a,r)=a gcd(a,r)=a。
然而 gcd ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1,因此只有 gcd ( a , k m ) = a \gcd(a,km)=a gcd(a,km)=a 才能够做到 gcd ( a , k m , r ) = a \gcd(a,km,r)=a gcd(a,km,r)=a。
所以 k = a k=a k=a。
但是因为 p i = a x i p_i=ax_i pi=axi,因此就要有 x i = m x_i=m xi=m 且 r = 0 r=0 r=0,显然与假设矛盾,因此原假设错误。
综上,引理 2 成立。
有了这两个引理之后,我们就可以证明欧拉定理了。
由引理 2,所有 p p p 模 m m m 的结果都与 m m m 互质。
由引理 1,任意两个 p p p 之间模 m m m 不同余,任意两个 x x x 之间模 m m m 不同余。
因此我们可以得到所有 p p p 模 m m m 的结果组成的集合与 x x x 模 m m m 的结果组成的集合是相同的。
因此我们就有 ∏ i = 1 φ ( m ) p i ≡ ∏ i = 1 φ ( m ) x i \prod\limits_{i=1}^{\varphi(m)}p_i \equiv \prod\limits_{i=1}^{\varphi(m)}x_i i=1∏φ(m)pi≡i=1∏φ(m)xi。
由同余式的基本性质,约去 ∏ x i \prod x_i ∏xi,我们可以得到 a φ ( m ) ≡ 1 a^{\varphi(m)}\equiv 1 aφ(m)≡1。
综上,欧拉定理成立。
4. 扩展欧拉定理
4.1 描述
扩展欧拉定理是欧拉定理的扩展,该定理将欧拉定理扩展到了 gcd ( a , m ) \gcd(a,m) gcd(a,m) 为任意数的情况。
其描述如下(均对 m m m 取模):
a b ≡ { a b m o d φ ( m ) gcd ( a , m ) = 1 a b gcd ( a , m ) ≠ 1 , b ≤ φ ( m ) a ( b m o d φ ( m ) ) + φ ( m ) gcd ( a , m ) ≠ 1 , b > φ ( 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} ab≡⎩⎪⎨⎪⎧abmodφ(m)aba(bmodφ(m))+φ(m)gcd(a,m)=1gcd(a,m)=1,b≤φ(m)gcd(a,m)=1,b>φ(m)
4.2 证明
下面同余式无说明均对 m m m 取模。
a b ≡ a b m o d φ ( m ) , gcd ( a , m ) = 1 a^b \equiv a^{b \bmod \varphi(m)},\gcd(a,m)=1 ab≡abmodφ(m),gcd(a,m)=1。
这个还是比较简单的。
由欧拉定理, a φ ( m ) ≡ 1 a^{\varphi(m)} \equiv 1 aφ(m)≡1,因此实际上我们两遍同时除以 a φ ( m ) a^{\varphi(m)} aφ(m) 是可行的。
因此原式得证。
a b ≡ a b , gcd ( a , m ) ≠ 1 , b ≤ φ ( m ) a^b \equiv a^b,\gcd(a,m) \ne1,b \leq \varphi(m) ab≡ab,gcd(a,m)=1,b≤φ(m)。
啊不是这还需要证明吗qwq
a b ≡ a ( b m o d φ ( m ) ) + φ ( m ) , gcd ( a , m ) ≠ 1 , b > φ ( m ) a^b \equiv a^{(b \bmod \varphi(m)) + \varphi(m)},\gcd(a,m) \ne 1,b > \varphi(m) ab≡a(bmodφ(m))+φ(m),gcd(a,m)=1,b>φ(m)。
首先对 a a a 做一个质因数分解 a = ∏ i = 1 k p i r i a=\prod_{i=1}^{k}p_i^{r_i} a=∏i=1kpiri。
因此根据同余式可以同乘的性质,我们的目标变成了证明 a = p i r i a=p_i^{r_i} a=piri 时上式成立。
显然 p i r i p_i^{r_i} piri 也是可以由 r i r_i ri 个 p i p_i pi 同乘的,因此我们的最终目的变成了证明当 a a a 是个质数的时候上式成立。
接下来的证明都只考虑 a a a 为质数。
考虑引入一个数 s s s 与 a a a 互质,令 m = s × a c , c ≤ φ ( m ) m=s \times a^c,c \leq \varphi(m) m=s×ac,c≤φ(m)。
- 实际上 c ≤ φ ( m ) c \leq \varphi(m) c≤φ(m) 是必定成立的,因为总共与 m m m 互质的数有 φ ( m ) \varphi(m) φ(m) 个,而且 φ ( m ) = φ ( s ) × φ ( a c ) = φ ( s ) × c , φ ( s ) ≥ 1 \varphi(m)=\varphi(s) \times \varphi(a^c)=\varphi(s) \times c,\varphi(s) \geq 1 φ(m)=φ(s)×φ(ac)=φ(s)×c,φ(s)≥1,因此有 c ≤ φ ( m ) c \leq \varphi(m) c≤φ(m)。
根据欧拉定理,有 a φ ( s ) ≡ 1 m o d s a^{\varphi(s)} \equiv 1 \bmod s aφ(s)≡1mods。
因为 gcd ( s , a ) = 1 \gcd(s,a)=1 gcd(s,a)=1,根据欧拉函数的下面这条性质:
- 设 n ∈ N + , p n \in N_+,p n∈N+,p 为质数,那么: φ ( n × p ) = { φ ( n ) × φ ( p ) p ∤ n φ ( n ) × p p ∣ n \varphi(n \times p)=\begin{cases}\varphi(n) \times \varphi(p)&p \nmid n\\\varphi(n) \times p&p \mid n\end{cases} φ(n×p)={φ(n)×φ(p)φ(n)×pp∤np∣n
我们可以得到 φ ( s ) ∣ φ ( m ) \varphi(s) \mid \varphi(m) φ(s)∣φ(m)。
因此有 a φ ( m ) = a φ ( s ) × φ ( m ) φ ( s ) ≡ 1 m o d s a^{\varphi(m)} =a^{\varphi(s) \times \frac{\varphi(m)}{\varphi(s)}}\equiv 1 \bmod s aφ(m)=aφ(s)×φ(s)φ(m)≡1mods。
两遍同乘以 a c a^c ac(注意模数变成了 m m m),有 a φ ( m ) + c ≡ a c a^{\varphi(m)+c} \equiv a^{c} aφ(m)+c≡ac。
于是 a b = a b − c + c = a c × a b − c ≡ a φ ( m ) + b , b ≥ c a^b=a^{b-c+c} =a^c \times a^{b-c}\equiv a^{\varphi(m)+b},b \geq c ab=ab−c+c=ac×ab−c≡aφ(m)+b,b≥c。
因为任意 c ≤ φ ( m ) c \leq \varphi(m) c≤φ(m) 上式都成立,因此有 a b ≡ a φ ( m ) + b a^b \equiv a^{\varphi(m)+b} ab≡aφ(m)+b。
上式等价于 a b ≡ a ( b m o d φ ( m ) ) + φ ( m ) a^b \equiv a^{(b \bmod \varphi(m))+\varphi(m)} ab≡a(bmodφ(m))+φ(m)。
因此我们成功的证明了 a a a 是个质数的时候原式成立。
那么根据我们一开始的理论,可以证出原式对于任意 a a a 都成立。
综上,扩展欧拉定理成立。
4.3 辅助说明
扩展欧拉定理:
a b ≡ { a b m o d φ ( m ) gcd ( a , m ) = 1 a b gcd ( a , m ) ≠ 1 , b ≤ φ ( m ) a ( b m o d φ ( m ) ) + φ ( m ) gcd ( a , m ) ≠ 1 , b > φ ( 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} ab≡⎩⎪⎨⎪⎧abmodφ(m)aba(bmodφ(m))+φ(m)gcd(a,m)=1gcd(a,m)=1,b≤φ(m)gcd(a,m)=1,b>φ(m)
首先观察一下第一个式子和第三个式子。
我们发现实际上这两个式子对于 b > φ ( m ) b>\varphi(m) b>φ(m) 的时候是等价的。
因此一般做题的时候我们不需要记第一个式子,只记第二个和第三个式子就好。
对于 b > φ ( m ) b>\varphi(m) b>φ(m) 的情况刚刚已经说过第一个式子与第二个式子等价。
对于 b ≤ φ ( m ) b \leq \varphi(m) b≤φ(m) 的情况因为 a b = a b a^b=a^b ab=ab 恒成立(难道不是吗),所以第一个式子和第二个式子等价。
当然如果出现了 gcd ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1 的情况实际上我们可以直接用欧拉定理即可。
或许有的人问了:对于第二个式子 a b ≡ a b , gcd ( a , m ) ≠ 1 , b ≤ φ ( m ) a^b \equiv a^b,\gcd(a,m) \ne 1,b \leq \varphi(m) ab≡ab,gcd(a,m)=1,b≤φ(m),为什么其不等价于第三个式子?
解释如下:
首先因为 gcd ( a , m ) ≠ 1 \gcd(a,m) \ne 1 gcd(a,m)=1,我们知道欧拉定理不成立,也就是 a φ ( m ) ≢ 1 a^{\varphi(m)} \not \equiv 1 aφ(m)≡1。
因此对第三个式子做一个拆分: a b ≡ a b m o d φ ( m ) × a φ ( m ) a^b \equiv a^{b \bmod \varphi(m)} \times a^{\varphi(m)} ab≡abmodφ(m)×aφ(m)。
我们发现因为 a φ ( m ) ≢ 1 a^{\varphi(m)} \not \equiv 1 aφ(m)≡1,因此我们不能在第二个式子两边同时乘以 a φ ( m ) a^{\varphi(m)} aφ(m)。
至于第三个式子可以其实是因为需要将 b b b 拆掉,这个时候需要 b > φ ( m ) b > \varphi(m) b>φ(m)。
4.4 例题
扩展欧拉定理板子题。
特别需要注意 b ≤ φ ( m ) b \leq \varphi(m) b≤φ(m) 的情况,此种情况 b b b 不能加上 φ ( m ) \varphi(m) φ(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 ≡ { a b m o d φ ( m ) gcd ( a , m ) = 1 a b gcd ( a , m ) ≠ 1 , b ≤ φ ( m ) a ( b m o d φ ( m ) ) + φ ( m ) gcd ( a , m ) ≠ 1 , b > φ ( 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} ab≡⎩⎪⎨⎪⎧abmodφ(m)aba(bmodφ(m))+φ(m)gcd(a,m)=1gcd(a,m)=1,b≤φ(m)gcd(a,m)=1,b>φ(m)