欧拉函数,欧拉定理(费马小定理),扩展欧拉定理的证明和应用——杨子曰数学
超链接:数学合集
瞎BB:破纪录,最长的博客名!(英文题目除外)
先做个预告:
在文章的最后我们要解决一个灰常玄学的问题:求
a
a
a
a
⋅
⋅
⋅
m
o
d
p
(
无
穷
多
个
a
)
a^{a^{a^{a^{·^{·^{·}}}}}} mod \ p(无穷多个a)
aaaa⋅⋅⋅mod p(无穷多个a)
一、欧拉函数
1.它是啥
φ ( n ) \varphi(n) φ(n):就是小于等于n的数中与n互质的数的个数
2.性质一:欧拉函数是积性的
就是
φ
(
n
∗
m
)
=
φ
(
n
)
∗
φ
(
m
)
\varphi(n*m)=\varphi(n)*\varphi(m)
φ(n∗m)=φ(n)∗φ(m) (条件:m,n互质)
为什么捏?
我们不妨假设小于m的数中于m互质的数为:
x
1
,
x
2
,
x
3
.
.
.
x
φ
(
m
)
x_1,x_2,x_3...x_{\varphi(m)}
x1,x2,x3...xφ(m),我们给它取个名字叫做m的简化剩余系
我们不妨假设小于n的数中于n互质的数为:
y
1
,
y
2
,
y
3
.
.
.
y
φ
(
n
)
y_1,y_2,y_3...y_{\varphi(n)}
y1,y2,y3...yφ(n),我们给它取个名字叫做n的简化剩余系
你会发现我们如果能证明好下面三个事情就得证了:
- g c d ( x i ∗ n + y j ∗ m , m n ) = 1 gcd(x_i*n+y_j*m,mn)=1 gcd(xi∗n+yj∗m,mn)=1,也就是这小于 m n mn mn的数中与 m n mn mn互质的数可以从m的简化剩余系里选一个n的简化剩余系选一个用 ( x i ∗ n + y j ∗ m ) m o d m n (x_i*n+y_j*m)mod\ mn (xi∗n+yj∗m)mod mn算出来,我们要 φ ( n ∗ m ) \varphi(n*m) φ(n∗m)个数,有 φ ( n ) ∗ φ ( m ) \varphi(n)*\varphi(m) φ(n)∗φ(m)种选法
- 这样选出来的 φ ( n ) ∗ φ ( m ) \varphi(n)*\varphi(m) φ(n)∗φ(m)个数没有重复
- 这样选出来的 φ ( n ) ∗ φ ( m ) \varphi(n)*\varphi(m) φ(n)∗φ(m)个数没有少
一个一个慢慢来:
① g c d ( x i ∗ n + y j ∗ m , m n ) = 1 gcd(x_i*n+y_j*m,mn)=1 gcd(xi∗n+yj∗m,mn)=1
首先我们从
g
c
d
(
x
i
,
m
)
=
1
gcd(x_i,m)=1
gcd(xi,m)=1开始
n和m互质,So,我们给x乘一个n等式依然成立
g
c
d
(
x
i
∗
n
,
m
)
=
1
gcd(x_i*n,m)=1
gcd(xi∗n,m)=1
然后我们在给
x
i
∗
n
x_i*n
xi∗n加上一个m的倍数
y
j
∗
m
y_j*m
yj∗m,等式依然成立
g
c
d
(
x
i
∗
n
+
y
j
∗
m
,
m
)
=
1
⋯
①
gcd(x_i*n+y_j*m,m)=1 \cdots①
gcd(xi∗n+yj∗m,m)=1⋯①
同理(对称一下),我们也可以得到:
g
c
d
(
y
j
∗
m
+
x
i
∗
n
,
n
)
=
1
⋯
②
gcd(y_j*m+x_i*n,n)=1 \cdots②
gcd(yj∗m+xi∗n,n)=1⋯②
①和②放在一起看,你会发现:
x
i
∗
n
+
y
j
∗
m
x_i*n+y_j*m
xi∗n+yj∗m又和m互质,又和n互质,那么和mn也一定互质:
g
c
d
(
x
i
∗
n
+
y
j
∗
m
,
m
n
)
=
1
gcd(x_i*n+y_j*m,mn)=1
gcd(xi∗n+yj∗m,mn)=1
得证
②这样选出来的 φ ( n ) ∗ φ ( m ) \varphi(n)*\varphi(m) φ(n)∗φ(m)个数没有重复
也就是任意的
x
i
∗
n
+
y
j
∗
m
x_i*n+y_j*m
xi∗n+yj∗m模mn都不同余
那么我们能不能这样来:如果我们能通过:
x
i
∗
n
+
y
j
∗
m
≡
x
p
∗
n
+
y
q
∗
m
(
m
o
d
m
n
)
x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ mn)
xi∗n+yj∗m≡xp∗n+yq∗m(mod mn)推出
i
=
p
,
j
=
k
i=p,j=k
i=p,j=k的话这个部分就得证了
那我们就来试试看呗:
x
i
∗
n
+
y
j
∗
m
≡
x
p
∗
n
+
y
q
∗
m
(
m
o
d
m
n
)
x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ mn)
xi∗n+yj∗m≡xp∗n+yq∗m(mod mn)
模mn下同余,那么在模m下也同余
x
i
∗
n
+
y
j
∗
m
≡
x
p
∗
n
+
y
q
∗
m
(
m
o
d
m
)
x_i*n+y_j*m \equiv x_p*n+y_q*m (mod\ m)
xi∗n+yj∗m≡xp∗n+yq∗m(mod m)
y
j
∗
m
y_j*m
yj∗m和
y
q
∗
m
y_q*m
yq∗m都是m的倍数,模m都是0,So,扔掉也无所谓:
x
i
∗
n
≡
x
p
∗
n
(
m
o
d
m
)
x_i*n\equiv x_p*n(mod\ m)
xi∗n≡xp∗n(mod m)
同余号两边同时除掉一个n:
x
i
≡
x
p
(
m
o
d
m
)
x_i\equiv x_p(mod\ m)
xi≡xp(mod m)
m的简化剩余系中的数都互不相等
哦,那不就是i=p了吗!
同理j=q,得证!
③这样选出来的 φ ( n ) ∗ φ ( m ) \varphi(n)*\varphi(m) φ(n)∗φ(m)个数没有少
设 z 是mn的简化剩余系的集合的任意某个元素,那么我们现在就是要证明z一定能用
x
i
∗
n
+
y
j
∗
m
x_i*n+y_j*m
xi∗n+yj∗m表示,黑喂狗:
我们都知道
m
∗
x
0
+
n
∗
y
0
=
g
c
d
(
m
,
n
)
m*x_0+n*y_0=gcd(m,n)
m∗x0+n∗y0=gcd(m,n)一定有关于
x
0
,
y
0
x_0,y_0
x0,y0的整数解
(有人问为什么吗?裴蜀定理←自己瞧)
然后我们还知道:
g
c
d
(
m
,
n
)
=
1
gcd(m,n)=1
gcd(m,n)=1,So,一定存在整数
x
0
,
y
0
x_0,y_0
x0,y0使得
m
∗
x
0
+
n
∗
y
0
=
1
m*x_0+n*y_0=1
m∗x0+n∗y0=1 ,然后同时乘个z,于是我们得到了:
m
∗
x
0
∗
z
+
n
∗
y
0
∗
z
=
z
m*x_0*z+n*y_0*z=z
m∗x0∗z+n∗y0∗z=z
也就是一定存在整数x,y,满足:
m
∗
x
+
n
∗
y
=
z
m*x+n*y=z
m∗x+n∗y=z
然后我们把
g
c
d
(
z
,
m
n
)
=
1
gcd(z,mn)=1
gcd(z,mn)=1里的z带掉,得到了:
g
c
d
(
m
∗
x
+
n
∗
y
,
m
n
)
=
1
gcd(m*x+n*y,mn)=1
gcd(m∗x+n∗y,mn)=1
那么下面这个也一定成立:
g
c
d
(
m
∗
x
+
n
∗
y
,
m
)
=
1
gcd(m*x+n*y,m)=1
gcd(m∗x+n∗y,m)=1
m
∗
x
m*x
m∗x是m的倍数,So,
m
∗
x
m*x
m∗x对这两个东西的互质毫无贡献,于是乎我们又得到了:
g
c
d
(
n
∗
y
,
m
)
=
1
gcd(n*y,m)=1
gcd(n∗y,m)=1
有没有发现n和m是互质的,然后我们就美滋滋地得到了:
g
c
d
(
y
,
m
)
=
1
gcd(y,m)=1
gcd(y,m)=1
然后咱们再用一下欧几里得算法(戳我):
g
c
d
(
m
,
y
m
o
d
m
)
=
1
gcd(m,y \ mod\ m)=1
gcd(m,y mod m)=1
也就是说
y
m
o
d
m
y \ mod\ m
y mod m是一个小于m且和m互质的数,有没有发现它一定在m的简化剩余系的简化剩余系里(←它的定义就是这样的呀)
然后我们就开心地得到了:
y
≡
x
i
(
m
o
d
m
)
y\equiv x_i(mod\ m)
y≡xi(mod m)
我们再把整个式子都乘个n,我们就有了:
n
∗
y
≡
n
∗
x
i
(
m
o
d
n
m
)
⋯
①
n*y\equiv n*x_i(mod\ nm) \cdots①
n∗y≡n∗xi(mod nm)⋯①
同理,我们还有:
m
∗
x
≡
m
∗
y
j
(
m
o
d
n
m
)
⋯
②
m*x\equiv m*y_j(mod\ nm) \cdots②
m∗x≡m∗yj(mod nm)⋯②
最后把①②咔嚓一加:
m
∗
x
+
n
∗
y
≡
n
∗
x
i
+
m
∗
y
i
(
m
o
d
n
m
)
m*x+n*y\equiv n*x_i+m*y_i(mod\ nm)
m∗x+n∗y≡n∗xi+m∗yi(mod nm)
就是:
z
≡
n
∗
x
i
+
m
∗
y
i
(
m
o
d
n
m
)
z\equiv n*x_i+m*y_i(mod\ nm)
z≡n∗xi+m∗yi(mod nm)
完美得证!
至此我们终于得到了,欧拉函数的积性o( ̄▽ ̄)ブ
3.性质二:p是质数时: φ ( p k ) = ( p − 1 ) ∗ p k − 1 \varphi(p^k)=(p-1)*p^{k-1} φ(pk)=(p−1)∗pk−1
已知小于 p k p^k pk的正整数的有 p k − 1 p^k-1 pk−1个,其中和 p k p^k pk不互质的正整数有 p × 1 , p × 2 , . . . , p × ( p k − 1 − 1 ) p×1,p×2,...,p×(p^{k-1}-1) p×1,p×2,...,p×(pk−1−1),共计 p k − 1 − 1 p^{k-1}-1 pk−1−1个
so, φ ( p k ) = p k − 1 − ( p k − 1 − 1 ) = p k − p k − 1 = ( p − 1 ) ∗ p k − 1 \varphi(p^k)= p^k-1-(p^{k-1}-1)=p^k-p^{k-1}=(p-1)*p^{k-1} φ(pk)=pk−1−(pk−1−1)=pk−pk−1=(p−1)∗pk−1
4.怎么求捏?
我们就来根据性质一和性质二来推导一下:
我们先分解一下质因数:
φ
(
n
)
=
φ
(
p
1
k
1
∗
p
2
k
2
∗
p
3
k
3
∗
⋯
∗
p
s
k
s
)
\varphi(n)=\varphi({p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}* \cdots*{p_s}^{k_s})
φ(n)=φ(p1k1∗p2k2∗p3k3∗⋯∗psks)
然后再由它的积性,我们得到了:
φ
(
n
)
=
φ
(
p
1
k
1
)
∗
φ
(
p
2
k
2
)
∗
φ
(
p
3
k
3
)
∗
⋯
∗
φ
(
p
s
k
s
)
\varphi(n)=\varphi({p_1}^{k_1})*\varphi({p_2}^{k_2})*\varphi({p_3}^{k_3})* \cdots*\varphi({p_s}^{k_s})
φ(n)=φ(p1k1)∗φ(p2k2)∗φ(p3k3)∗⋯∗φ(psks)
然后性质2搞一搞:
φ
(
n
)
=
(
p
1
k
1
−
1
∗
p
2
k
2
−
1
∗
p
3
k
3
−
1
∗
⋯
∗
p
s
k
s
−
1
)
∗
(
p
1
−
1
)
∗
(
p
2
−
1
)
∗
(
p
3
−
1
)
∗
⋯
∗
(
p
s
−
1
)
\varphi(n)=({p_1}^{k_1-1}*{p_2}^{k_2-1}*{p_3}^{k_3-1}*\cdots*{p_s}^{k_s-1})*(p_1-1)*(p_2-1)*(p_3-1)* \cdots*(p_s-1)
φ(n)=(p1k1−1∗p2k2−1∗p3k3−1∗⋯∗psks−1)∗(p1−1)∗(p2−1)∗(p3−1)∗⋯∗(ps−1)
从右边的每个小括号里拿出一个
p
i
p_i
pi乘到左边的括号中,我们得到了:
φ
(
n
)
=
(
p
1
k
1
∗
p
2
k
2
∗
p
3
k
3
∗
⋯
∗
p
s
k
s
)
∗
(
1
−
1
p
1
)
∗
(
1
−
1
p
2
)
∗
(
1
−
1
p
3
)
∗
⋯
∗
(
1
−
1
p
s
)
\varphi(n)=({p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}*\cdots*{p_s}^{k_s})*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*(1-\frac{1}{p_3})* \cdots*(1-\frac{1}{p_s})
φ(n)=(p1k1∗p2k2∗p3k3∗⋯∗psks)∗(1−p11)∗(1−p21)∗(1−p31)∗⋯∗(1−ps1)
也就是说,我们得到了
φ
(
n
)
\varphi(n)
φ(n)的通项公式:
φ
(
n
)
=
n
∗
(
1
−
1
p
1
)
∗
(
1
−
1
p
2
)
∗
(
1
−
1
p
3
)
∗
⋯
∗
(
1
−
1
p
s
)
\varphi(n)=n*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*(1-\frac{1}{p_3})* \cdots*(1-\frac{1}{p_s})
φ(n)=n∗(1−p11)∗(1−p21)∗(1−p31)∗⋯∗(1−ps1)
复杂度 O ( n ) O(\sqrt{n}) O(n)
求欧拉函数还有一种线性筛的做法(戳我)
我们马上进入欧拉定理
二、欧拉定理
1.它是啥?
先上个欧拉定理(条件是a和n互质):
a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)} \equiv1(mod \ n) aφ(n)≡1(mod n)
2.它为啥?
黑喂狗:
我们不妨假设小于n的数中于n互质的数为:
x
1
,
x
2
,
x
3
.
.
.
x
φ
(
n
)
x_1,x_2,x_3...x_{\varphi(n)}
x1,x2,x3...xφ(n),我们给它取个名字叫做集合X(这个X其实就是n的简化剩余系)
然后我们再分别令:
{
m
1
=
a
∗
x
1
m
2
=
a
∗
x
2
m
3
=
a
∗
x
3
⋮
m
φ
(
n
)
=
a
∗
x
φ
(
n
)
\left\{ \begin{aligned} m_1 & = a*x_1\\ m_2 & = a*x_2\\ m_3 & = a*x_3\\ \vdots\\ m_{\varphi(n)} & = a*x_{\varphi(n)}\\ \end{aligned} \right.
⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧m1m2m3⋮mφ(n)=a∗x1=a∗x2=a∗x3=a∗xφ(n)
我们管这个m的序列叫集合M
有了集合X和集合M,我们就可以开始了
不过在开始前,我们先要证明两件事情:
- M中任意两个数都不模n同余
- M中的数模n得到的数都与n互质
一个一个来:
①M中任意两个数都不模n同余
我们用反证法
假设集合M中有
m
i
m_i
mi和
m
j
m_j
mj两个数模n同余
即:
m
i
≡
m
j
(
m
o
d
n
)
m_i \equiv m_j(mod \ n)
mi≡mj(mod n)
也就是:
m
i
−
m
j
≡
0
(
m
o
d
n
)
m_i-m_j \equiv 0(mod \ n)
mi−mj≡0(mod n)
代入一下:
a
∗
x
i
−
a
∗
x
j
≡
0
(
m
o
d
n
)
a*x_i-a*x_j\equiv 0(mod \ n)
a∗xi−a∗xj≡0(mod n)
a
∗
(
x
i
−
x
j
)
≡
0
(
m
o
d
n
)
a∗(x_i−x_j)\equiv 0(mod \ n)
a∗(xi−xj)≡0(mod n)
我们都知道a和n互质(大条件),So:
x
i
−
x
j
≡
0
(
m
o
d
n
)
x_i−x_j\equiv 0(mod \ n)
xi−xj≡0(mod n)
我们都知道
x
i
x_i
xi和
x
j
x_j
xj都是小于n的不同数,所以
x
i
−
x
j
x_i−x_j
xi−xj一定大于0小于n,So上面那个式子怎么可能成立
得证!
②M中的数模n得到的数都与n互质
这个比较easy
我们知道:
m
i
=
a
∗
x
i
m_i=a*x_i
mi=a∗xi,这个式子里a与n互质,
x
i
x_i
xi与n互质,然后你就会发现
m
i
m_i
mi也和n互质,然后欧几里得算法搞一下:
g
c
d
(
m
i
,
n
)
=
g
c
d
(
n
,
m
i
m
o
d
n
)
=
1
gcd(m_i,n)=gcd(n,m_i\ mod\ n)=1
gcd(mi,n)=gcd(n,mi mod n)=1
完美,得证!
然后咱们正式开始:
由我们在上面得到的第二条可以得到: m i m o d n m_i \ mod\ n mi mod n出来的一定是一个小于n而且和n互质的数,So, m i m o d n m_i \ mod\ n mi mod n这个数一定在集合X里(集合X的定义就是这样的呀!)
有根据第一条集合M中的每个 m i m o d n m_i \ mod\ n mi mod n得到的数都不相同,So,你有没有发现集合M中这每个 m i m o d n m_i \ mod\ n mi mod n与集合X中的每个 x i x_i xi一 一对应相等
于是我们就得到了:
m
1
∗
m
2
∗
m
3
∗
⋯
∗
m
φ
(
n
)
≡
x
1
∗
x
2
∗
x
3
∗
⋯
∗
x
φ
(
n
)
(
m
o
d
n
)
m_1*m_2*m_3*\cdots*m_{\varphi(n)} \equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
m1∗m2∗m3∗⋯∗mφ(n)≡x1∗x2∗x3∗⋯∗xφ(n)(mod n)
代入一下:
a
∗
x
1
∗
a
∗
x
2
∗
a
∗
x
3
∗
⋯
∗
a
∗
x
φ
(
n
)
≡
x
1
∗
x
2
∗
x
3
∗
⋯
∗
x
φ
(
n
)
(
m
o
d
n
)
a*x_1*a*x_2*a*x_3*\cdots*a*x_{\varphi(n)} \equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
a∗x1∗a∗x2∗a∗x3∗⋯∗a∗xφ(n)≡x1∗x2∗x3∗⋯∗xφ(n)(mod n)
a
φ
(
n
)
∗
(
x
1
∗
x
2
∗
x
3
∗
⋯
∗
x
φ
(
n
)
)
≡
x
1
∗
x
2
∗
x
3
∗
⋯
∗
x
φ
(
n
)
(
m
o
d
n
)
a^{\varphi(n)}*(x_1*x_2*x_3*\cdots*x_{\varphi(n)})\equiv x_1*x_2*x_3*\cdots*x_{\varphi(n)}(mod \ n)
aφ(n)∗(x1∗x2∗x3∗⋯∗xφ(n))≡x1∗x2∗x3∗⋯∗xφ(n)(mod n)
哦,移过去:
(
a
φ
(
n
)
−
1
)
∗
(
x
1
∗
x
2
∗
x
3
∗
⋯
∗
x
φ
(
n
)
)
≡
0
(
m
o
d
n
)
(a^{\varphi(n)}-1)*(x_1*x_2*x_3*\cdots*x_{\varphi(n)})\equiv 0(mod \ n)
(aφ(n)−1)∗(x1∗x2∗x3∗⋯∗xφ(n))≡0(mod n)
美滋滋,集合X中的所有数都与n互质,于是乎:
a
φ
(
n
)
−
1
≡
0
(
m
o
d
n
)
a^{\varphi(n)}-1\equiv 0(mod \ n)
aφ(n)−1≡0(mod n)
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi(n)}\equiv 1(mod \ n)
aφ(n)≡1(mod n)
得证
到这里,你一定会问了——“这玩意什么用捏?”
“没用”
“…”
"BUT,我们把欧拉定理转换一下就有用了"
3.它能干啥?
主要可以做两件事情:
- 转换成费马小定理后,进行素数检测(就是给你一个数说出它是不是素数)
- 转换成费马小定理后求逆元(戳我)
- 转换成扩展欧拉定理以后,欧拉降幂算 a b m o d p a^b mod\ p abmod p(这不是快速幂搞搞不就好了,戳这里就老实了)
咱们一件一件说:
4.费马小定理
当 p 是 质 数 时 : a p − 1 ≡ 1 ( m o d p ) 当p是质数时:a^{p-1} \equiv1(mod \ p) 当p是质数时:ap−1≡1(mod p)
这……
不就是欧拉定理的特殊情况吗?
你可不要小看这个东西,他可以告诉你n是不是一个质数
“哦哦,我知道了,随便找一个小于n的数a,然后代入到费马小定理里面,看看是不是同余就可以了”
没错,就是这样,但是有一个很尴尬的事情:p为质数是费马小定理的充分不必要条件!
也就是说,对于2<=a<p,素数p一定满足费马小定理
对于一个a,满足费马小定理的p可能是合数可能是素数
不满足费马小定理一定是合数
“哦,什么垃圾算法,居然有概率是错的”
那你多找几个a不久好了,又要拼rp,美滋滋!
(一般还是不要用这个算法)
int check_prime(int n){
if (n==1) return 0;
if (n==2) return 1;
for (int i=1;i<=20;i++){
int tmp=rand()%(n-2)+2;
if (pow(tmp,n-1,n)!=1) return 0;
}
return 1;
}
大家还可以去学习一种更加nb的素数检验方法——米勒拉宾素数测试
5.扩展欧拉定理
在讲扩展欧拉定理之前,先试试这个:口算 7 555 m o d 13 7^{555}\ mod\ 13 7555 mod 13
相信机智的大佬们一定有所想法,7和13互质
φ
(
13
)
\varphi(13)
φ(13)=12,那我们就要凑
7
12
7^{12}
712:
7
555
=
7
12
∗
46
+
3
=
(
7
12
)
46
∗
7
3
7^{555}=7^{12*46+3}=(7^{12})^{46}*7^3
7555=712∗46+3=(712)46∗73
于是乎,就可以使用欧拉定理了
(
7
12
)
46
∗
7
3
≡
1
46
∗
7
3
(
m
o
d
13
)
(7^{12})^{46}*7^3\equiv1^{46}*7^3(mod\ 13)
(712)46∗73≡146∗73(mod 13)
那我们就只需要算一算
7
3
m
o
d
13
7^3\ mod\ 13
73 mod 13就好了,得到答案5
于是有没有发现我们似乎得到了一个定理:
a
b
≡
a
b
m
o
d
φ
(
n
)
(
m
o
d
n
)
a^b\equiv a^{b\ mod\ \varphi(n)}(mod\ n)
ab≡ab mod φ(n)(mod n)
BUT,它只有在a和p互质的时才成立,没啥卵用,我们能不能把它拓展到一般情况捏?
于是,我们得到了扩展欧拉定理:
a
b
≡
a
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
a^b\equiv a^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
ab≡ab mod φ(n)+φ(n)(mod n)
证明走起:
我们先把a分解一下质因数: a = p 1 r 1 ∗ p 2 r 2 ∗ p 3 r 3 ∗ ⋯ ∗ p s r s a={p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s} a=p1r1∗p2r2∗p3r3∗⋯∗psrs
如果我们可以证明:对于里面的每个质数
p
i
p_i
pi,我们都能证明:
p
i
b
≡
p
i
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
{p_i}^b \equiv {p_i}^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
pib≡pib mod φ(n)+φ(n)(mod n)
那么也就是我们一定可以得到:
(
p
i
r
i
)
b
≡
(
p
i
r
i
)
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
({p_i}^{r_i})^b \equiv ({p_i}^{r_i})^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
(piri)b≡(piri)b mod φ(n)+φ(n)(mod n)
然后我们把每个
(
p
i
r
i
)
b
({p_i}^{r_i})^b
(piri)b乘起来,就得到了:
(
p
1
r
1
∗
p
2
r
2
∗
p
3
r
3
∗
⋯
∗
p
s
r
s
)
b
≡
(
p
1
r
1
∗
p
2
r
2
∗
p
3
r
3
∗
⋯
∗
p
s
r
s
)
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
({p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s})^b \equiv ({p_1}^{r_1}*{p_2}^{r_2}*{p_3}^{r_3}*\cdots*{p_s}^{r_s})^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
(p1r1∗p2r2∗p3r3∗⋯∗psrs)b≡(p1r1∗p2r2∗p3r3∗⋯∗psrs)b mod φ(n)+φ(n)(mod n)
也就是我们要证明的:
a
b
≡
a
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
a^b\equiv a^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
ab≡ab mod φ(n)+φ(n)(mod n)
那现在我们就开始证明: p b ≡ p b m o d φ ( n ) + φ ( n ) ( m o d n ) ( p 是 一 个 质 数 ) p^b \equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)(p是一个质数) pb≡pb mod φ(n)+φ(n)(mod n)(p是一个质数)
p是一个质数,So,如果n不是p的倍数,那么n和p一定互质,显然成立,就是我们上面自己推出来的那个式子右边多乘了一个 p φ ( n ) p^{\varphi(n)} pφ(n)
而 p φ ( n ) m o d n = 1 ( 欧 拉 定 理 ) p^{\varphi(n)} \ mod \ n=1(欧拉定理) pφ(n) mod n=1(欧拉定理),So,等式当然成立
那么我们现在就来考虑n是p的倍数的情况:
假设:
n
=
p
k
∗
s
n=p^k*s
n=pk∗s(s和p互质)
由于s和p的互质,我们就可以欧拉定理了:
p
φ
(
s
)
≡
1
(
m
o
d
s
)
p^{\varphi(s)} \equiv1(mod \ s)
pφ(s)≡1(mod s)
这个式子也显然成立:
(
p
φ
(
s
)
)
φ
(
p
k
)
≡
1
(
m
o
d
s
)
(p^{\varphi(s)})^{\varphi(p^k)} \equiv1(mod \ s)
(pφ(s))φ(pk)≡1(mod s)
上面已经说过了,欧拉函数是积性函数,又因为
p
k
p^k
pk和s互质,So:
φ
(
n
)
=
φ
(
p
k
)
∗
φ
(
s
)
\varphi(n)=\varphi(p^k)*\varphi(s)
φ(n)=φ(pk)∗φ(s)
于是我们就得到了:
p
φ
(
n
)
≡
1
(
m
o
d
s
)
⋯
①
(
这
个
式
子
下
面
还
要
用
)
p^{\varphi(n)} \equiv1(mod \ s)\cdots①(这个式子下面还要用)
pφ(n)≡1(mod s)⋯①(这个式子下面还要用)
又因为:
p
b
=
(
p
φ
(
n
)
)
⌊
b
/
φ
(
n
)
⌋
∗
p
b
m
o
d
φ
(
n
)
p^b=(p^{\varphi(n)})^{\lfloor b/\varphi(n)\rfloor}*p^{b\ mod\ \varphi(n)}
pb=(pφ(n))⌊b/φ(n)⌋∗pb mod φ(n)
还因为:
(
p
φ
(
n
)
)
⌊
b
/
φ
(
n
)
⌋
m
o
d
s
=
1
(
看
①
式
)
(p^{\varphi(n)})^{\lfloor b/\varphi(n)\rfloor}\ mod\ s=1(看①式)
(pφ(n))⌊b/φ(n)⌋ mod s=1(看①式)
我们得到了:
p
b
≡
p
b
m
o
d
φ
(
n
)
(
m
o
d
s
)
p^b\equiv p^{b\ mod\ \varphi(n)}(mod\ s)
pb≡pb mod φ(n)(mod s)
我们再把整个式子乘
p
k
p^k
pk,得到:
p
b
+
k
≡
p
b
m
o
d
φ
(
n
)
+
k
(
m
o
d
s
∗
p
k
)
p^{b+k}\equiv p^{b\ mod\ \varphi(n)+k}(mod\ s*p^k)
pb+k≡pb mod φ(n)+k(mod s∗pk)
p
b
+
k
≡
p
b
m
o
d
φ
(
n
)
+
k
(
m
o
d
n
)
p^{b+k}\equiv p^{b\ mod\ \varphi(n)+k}(mod\ n)
pb+k≡pb mod φ(n)+k(mod n)
如果,我们把左右两边同时乘
p
φ
(
n
)
−
k
p^{\varphi(n)-k}
pφ(n)−k,你就会惊悚地发现:
p
b
+
φ
(
n
)
≡
p
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
⋯
②
p^{b+\varphi(n)}\equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)\cdots②
pb+φ(n)≡pb mod φ(n)+φ(n)(mod n)⋯②
已经非常接近答案了,我们在把①乘
p
k
p^k
pk,得到了:
p
φ
(
n
)
+
k
≡
p
k
(
m
o
d
p
k
∗
s
)
p^{\varphi(n)+k} \equiv p^k(mod \ p^k*s)
pφ(n)+k≡pk(mod pk∗s)
p
φ
(
n
)
+
k
≡
p
k
(
m
o
d
n
)
⋯
③
p^{\varphi(n)+k} \equiv p^k(mod\ n)\cdots③
pφ(n)+k≡pk(mod n)⋯③
然后我们有这样的等式:
p
b
≡
p
b
−
k
∗
p
k
(
m
o
d
n
)
p^b\equiv p^{b-k}*p^k(mod\ n)
pb≡pb−k∗pk(mod n)
然后根据③把
p
k
p^k
pk用
p
φ
(
n
)
+
k
p^{\varphi(n)+k}
pφ(n)+k带掉,我们有了:
p
b
≡
p
b
+
φ
(
n
)
(
m
o
d
n
)
p^b\equiv p^{b+\varphi(n)}(mod\ n)
pb≡pb+φ(n)(mod n)
最后把这个式子带回②的左边:
p
b
≡
p
b
m
o
d
φ
(
n
)
+
φ
(
n
)
(
m
o
d
n
)
p^b \equiv p^{b\ mod\ \varphi(n)+\varphi(n)}(mod\ n)
pb≡pb mod φ(n)+φ(n)(mod n)
哦,我们得证了!
接下来我来解答文章开头的那个问题:
求
a
a
a
a
⋅
⋅
⋅
m
o
d
p
(
无
穷
多
个
a
)
求a^{a^{a^{a^{·^{·^{·}}}}}} mod \ p(无穷多个a)
求aaaa⋅⋅⋅mod p(无穷多个a)
我们不妨令
x
=
a
a
a
a
⋅
⋅
⋅
x=a^{a^{a^{a^{·^{·^{·}}}}}}
x=aaaa⋅⋅⋅
那么我们现在就是要求
x
m
o
d
p
x\ mod\ p
x mod p
然后你会发现x这个数有一个很神奇但很好理解的性质:
x
=
a
x
x=a^x
x=ax
So,我们现在要求:
a
x
m
o
d
p
a^x\ mod\ p
ax mod p
哦,有没有发现可以用拓展欧拉定理了!
于是我们得到了:
a
x
≡
a
x
m
o
d
φ
(
p
)
+
φ
(
p
)
(
m
o
d
p
)
a^x\equiv a^{x\ mod\ \varphi(p)+\varphi(p)}(mod\ p)
ax≡ax mod φ(p)+φ(p)(mod p)
然后问题就转化为求等式右边那个东西,想要求出这个东西,就是要求出——
x
m
o
d
φ
(
p
)
x\ mod\ \varphi(p)
x mod φ(p)
哦,有没有发现问题变回了开始的样子,只不过p变成了 φ ( p ) \varphi(p) φ(p),我们在继续试试:
这时x依然等于 a x a^x ax
根据欧拉定理:
a
x
≡
a
x
m
o
d
φ
(
φ
(
p
)
)
+
φ
(
φ
(
p
)
)
(
m
o
d
φ
(
p
)
)
a^x\equiv a^{x\ mod\ \varphi(\varphi(p))+\varphi(\varphi(p))}(mod\ \varphi(p))
ax≡ax mod φ(φ(p))+φ(φ(p))(mod φ(p))
此时,我们就要求的就是
x
m
o
d
φ
(
φ
(
p
)
)
x\ mod\ \varphi(\varphi(p))
x mod φ(φ(p))了
p不停地变
φ
(
p
)
\varphi(p)
φ(p),显然是不断减小的
显然这是一个递归的过程,那么到什么时候结束捏?
——当p=1的时候,显然所有的数模1都是0,然后再回溯上去
OK,完事
如果想要尝试这道题,你可以戳我(略有区别,它的a永远等于2)
参考:
https://www.cnblogs.com/wangxiaodai/p/9758242.html
https://blog.csdn.net/qq9764312/article/details/79616041
https://zhuanlan.zhihu.com/p/31510871
https://blog.csdn.net/hzj1054689699/article/details/80693756
https://blog.csdn.net/summonlight/article/details/51967425
https://www.cnblogs.com/handsomecui/p/4755455.html
于HG机房&TJQ高层小区