一.欧拉函数的定义.
欧拉函数:定义欧拉函数
ϕ
(
n
)
\phi(n)
ϕ(n)表示
[
1
,
n
]
[1,n]
[1,n]中与
n
n
n互质的数的个数,即:
ϕ
(
n
)
=
∑
i
=
1
n
[
gcd
(
n
,
i
)
=
1
]
\phi(n)=\sum_{i=1}^{n}[\gcd(n,i)=1]
ϕ(n)=i=1∑n[gcd(n,i)=1]
所以下次看到这个式子就知道是个欧拉函数的定义式了.
这个东西与剩余系的关系参见同余理论相关.
二.单个欧拉函数的计算.
根据定义,单个欧拉函数 ϕ ( n ) \phi(n) ϕ(n)需要 O ( n ) O(n) O(n)的时间才能计算,但我们可以更快.
欧拉函数计算公式:设唯一分解式
n
=
∏
i
=
1
k
p
i
c
i
n=\prod_{i=1}^{k}p_i^{c_i}
n=∏i=1kpici,则有:
ϕ
(
n
)
=
n
∏
i
=
1
k
p
i
−
1
p
i
\phi(n)=n\prod_{i=1}^{k}\frac{p_i-1}{p_i}
ϕ(n)=ni=1∏kpipi−1
证明:
考虑用容斥计算欧拉函数,设唯一分解
n
=
∏
i
=
1
k
p
i
c
i
n=\prod_{i=1}^{k}p_i^{c_i}
n=∏i=1kpici,我们可以得到:
ϕ
(
n
)
=
∑
T
⊆
[
k
]
(
−
1
)
∣
T
∣
n
∏
i
∈
T
p
i
\phi(n)=\sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}
ϕ(n)=T⊆[k]∑(−1)∣T∣∏i∈Tpin
现在我们要证明的是:
∑
T
⊆
[
k
]
(
−
1
)
∣
T
∣
n
∏
i
∈
T
p
i
=
n
∏
i
=
1
k
p
i
−
1
p
i
\sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}=n\prod_{i=1}^{k}\frac{p_i-1}{p_i}
T⊆[k]∑(−1)∣T∣∏i∈Tpin=ni=1∏kpipi−1
考虑数学归纳法:
1.对于
k
=
1
,
2
k=1,2
k=1,2的情况,显然结论成立.
2.对于
k
>
2
k>2
k>2的情况,若在
k
<
m
k<m
k<m时结论成立,则
k
=
m
k=m
k=m时有:
∑
T
⊆
[
k
]
(
−
1
)
∣
T
∣
n
∏
i
∈
T
p
i
=
∑
T
⊆
[
k
−
1
]
(
−
1
)
∣
T
∣
n
∏
i
∈
T
p
i
−
∑
T
⊆
[
k
−
1
]
(
−
1
)
∣
T
∣
n
p
k
∏
i
∈
T
p
i
=
n
(
∏
i
=
1
k
−
1
p
i
−
1
p
i
−
1
p
k
∏
i
=
1
k
−
1
p
i
−
1
p
i
)
=
n
∏
i
=
1
k
p
i
−
1
p
i
\sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}\\ =\sum_{T\subseteq [k-1]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}-\sum_{T\subseteq [k-1]}(-1)^{|T|}\frac{n}{p_k\prod_{i\in T}p_i}\\ =n\left(\prod_{i=1}^{k-1}\frac{p_i-1}{p_i}-\frac{1}{p_k}\prod_{i=1}^{k-1}\frac{p_i-1}{p_i}\right)\\ =n\prod_{i=1}^{k}\frac{p_i-1}{p_i}
T⊆[k]∑(−1)∣T∣∏i∈Tpin=T⊆[k−1]∑(−1)∣T∣∏i∈Tpin−T⊆[k−1]∑(−1)∣T∣pk∏i∈Tpin=n(i=1∏k−1pipi−1−pk1i=1∏k−1pipi−1)=ni=1∏kpipi−1
证毕.
根据这个性质,我们可以在 O ( n ) O(\sqrt{n}) O(n)的时间复杂度内求单个 ϕ ( n ) \phi(n) ϕ(n).
代码如下:
int Get_phi(int n){
int res=n,now=n;
for (int i=2;i*i<=n;++i)
if (now%i==0)
for (res=res/i*(i-1);now%i==0;now/=i);
if (now>1) res=res/now*(now-1);
return res;
}
三.欧拉函数若干性质.
性质1:欧拉函数是一个积性函数,即 gcd ( a , b ) = 1 ⇒ ϕ ( a b ) = ϕ ( a ) ϕ ( b ) \gcd(a,b)=1\Rightarrow \phi(ab)=\phi(a)\phi(b) gcd(a,b)=1⇒ϕ(ab)=ϕ(a)ϕ(b).
证明:
我们让
P
P
P代表素数集,那么有:
ϕ
(
a
b
)
=
a
b
∏
p
∈
P
∧
p
∣
a
b
p
−
1
p
=
a
∏
p
∈
P
∧
p
∣
a
p
−
1
p
∗
b
∏
p
∈
P
∧
p
∣
b
p
−
1
p
=
ϕ
(
a
)
ϕ
(
b
)
\phi(ab)=ab\prod_{p\in P\wedge p|ab}\frac{p-1}{p}\\ =a\prod_{p\in P\wedge p|a}\frac{p-1}{p}*b\prod_{p\in P\wedge p|b}\frac{p-1}{p}\\ =\phi(a)\phi(b)
ϕ(ab)=abp∈P∧p∣ab∏pp−1=ap∈P∧p∣a∏pp−1∗bp∈P∧p∣b∏pp−1=ϕ(a)ϕ(b)
证毕.
性质1的推论:设唯一分解
n
=
∏
i
=
1
k
p
i
c
i
n=\prod_{i=1}^{k}p_i^{c_i}
n=∏i=1kpici,则有:
ϕ
(
n
)
=
∏
i
=
1
k
ϕ
(
p
i
c
i
)
\phi(n)=\prod_{i=1}^{k}\phi(p_i^{c_i})
ϕ(n)=i=1∏kϕ(pici)
性质2: ∑ d ∣ n ϕ ( n ) = n \sum_{d|n}\phi(n)=n ∑d∣nϕ(n)=n.
证明:
首先我们构造函数
f
(
n
)
f(n)
f(n)为:
f
(
n
)
=
∑
d
∣
n
ϕ
(
n
)
f(n)=\sum_{d|n}\phi(n)
f(n)=d∣n∑ϕ(n)
容易发现这是一个积性函数,所以有:
gcd
(
x
,
y
)
=
1
⇒
f
(
x
y
)
=
f
(
x
)
f
(
y
)
\gcd(x,y)=1\Rightarrow f(xy)=f(x)f(y)
gcd(x,y)=1⇒f(xy)=f(x)f(y)
此时我们可以把
n
n
n写成唯一分解形式
n
=
∏
i
=
1
k
p
i
c
i
n=\prod_{i=1}^{k}p_i^{c_i}
n=∏i=1kpici,容易发现现在只需要证明:
∑
d
∣
p
i
c
i
ϕ
(
d
)
=
p
i
c
i
\sum_{d|p_i^{c_i}}\phi(d)=p_i^{c_i}
d∣pici∑ϕ(d)=pici
于是有:
∑
d
∣
p
i
c
i
ϕ
(
d
)
=
∑
j
=
0
c
i
ϕ
(
p
i
j
)
=
1
+
∑
j
=
0
c
i
−
1
(
p
i
−
1
)
p
i
j
=
1
+
(
p
i
−
1
)
1
−
p
i
c
i
1
−
p
i
=
1
+
p
i
c
i
−
1
=
p
i
c
i
\sum_{d|p_i^{c_i}}\phi(d)=\sum_{j=0}^{c_i}\phi(p_i^{j})\\ =1+\sum_{j=0}^{c_i-1}(p_i-1)p_i^{j}\\ =1+(p_i-1)\frac{1-p_i^{c_i}}{1-p_i}\\ =1+p_i^{c_i}-1\\ =p_i^{c_i}
d∣pici∑ϕ(d)=j=0∑ciϕ(pij)=1+j=0∑ci−1(pi−1)pij=1+(pi−1)1−pi1−pici=1+pici−1=pici
证毕.
性质3: n > 1 ⇒ ∑ i ∈ [ 1 , n ] ∧ gcd ( n , i ) = 1 i = n ϕ ( n ) 2 n>1\Rightarrow \sum_{i\in [1,n]\wedge \gcd(n,i)=1}i=\frac{n\phi(n)}{2} n>1⇒∑i∈[1,n]∧gcd(n,i)=1i=2nϕ(n).
证明:
gcd
(
n
,
i
)
=
1
⇔
gcd
(
i
,
n
−
i
)
=
1
\gcd(n,i)=1\Leftrightarrow \gcd(i,n-i)=1
gcd(n,i)=1⇔gcd(i,n−i)=1
也就是说对于满足条件的数有
ϕ
(
n
)
\phi(n)
ϕ(n)个,并且若有
gcd
(
n
,
i
)
=
1
\gcd(n,i)=1
gcd(n,i)=1,必然有
gcd
(
n
,
n
−
i
)
=
1
\gcd(n,n-i)=1
gcd(n,n−i)=1,此时两两配对得到
i
+
(
n
−
i
)
=
n
i+(n-i)=n
i+(n−i)=n,对数为
ϕ
(
n
)
2
\frac{\phi(n)}{2}
2ϕ(n),乘起来就可以证明.
证毕.
四.线性筛欧拉函数.
我们可以用线性筛做到 O ( n ) O(n) O(n)求出 [ 1 , n ] [1,n] [1,n]上的所有欧拉函数.
具体来说,我们在线性筛的时候分三种情况:
1.
p
p
p为素数时,
ϕ
(
p
)
=
p
−
1
\phi(p)=p-1
ϕ(p)=p−1.
2.
p
p
p为
n
p
np
np的最小素因子且
p
∤
n
p\nmid n
p∤n时,
ϕ
(
n
p
)
=
ϕ
(
n
)
ϕ
(
p
)
=
(
p
−
1
)
ϕ
(
n
)
\phi(np)=\phi(n)\phi(p)=(p-1)\phi(n)
ϕ(np)=ϕ(n)ϕ(p)=(p−1)ϕ(n).
3.
p
p
p为
n
p
np
np的最小素因子且
p
∣
n
p|n
p∣n时,
ϕ
(
n
p
)
=
p
ϕ
(
n
)
\phi(np)=p\phi(n)
ϕ(np)=pϕ(n).
然后我们就可以写出线性筛欧拉函数的代码:
int n,b[N+9],pr[N+9],cp;
int phi[N+9];
void Sieve(){
phi[1]=1;
for (int i=2;i<=n;++i){
if (!b[i]) pr[++cp]=i,phi[i]=i-1;
for (int j=1;j<=cp&&i*pr[j]<=n;++j){
int t=i*pr[j];
b[t]=1;
if (i%pr[j]==0) {phi[t]=phi[i]*pr[j];break;}
phi[t]=phi[i]*(pr[j]-1);
}
}
}
五.欧拉定理.
欧拉定理: gcd ( n , a ) = 1 ⇒ a ϕ ( n ) = 1 ( m o d n ) \gcd(n,a)=1\Rightarrow a^{\phi(n)}=1\,\,(mod\,\,n) gcd(n,a)=1⇒aϕ(n)=1(modn).
证明:
设
n
n
n的简化剩余系为
S
n
S_n
Sn,由于
S
n
S_n
Sn和模
n
n
n意义下的乘法构成一个群,所以有:
x
∈
S
n
⇒
a
x
m
o
d
n
∈
S
n
x
,
y
∈
S
∧
x
≠
y
⇒
a
x
≢
a
y
(
m
o
d
n
)
x\in S_n\Rightarrow ax\,\,mod\,\,n\in S_n\\ x,y\in S\wedge x\neq y\Rightarrow ax\not\equiv ay\,\,(mod\,\, n)
x∈Sn⇒axmodn∈Snx,y∈S∧x=y⇒ax≡ay(modn)
那么显然 S n ′ = { a x m o d n ∣ x ∈ S n } S'_n=\{ax\,\,mod\,\,n|x\in S_n\} Sn′={axmodn∣x∈Sn}与 S n S_n Sn同是 n n n的简化剩余系.
那么就有:
a
ϕ
(
n
)
∏
x
∈
S
n
x
≡
∏
x
∈
S
n
a
x
≡
∏
x
∈
S
n
x
(
m
o
d
n
)
a^{\phi(n)}\prod_{x\in S_n}x\equiv \prod_{x\in S_n}ax\equiv \prod_{x\in S_n}x\,\,(mod\,\,n)
aϕ(n)x∈Sn∏x≡x∈Sn∏ax≡x∈Sn∏x(modn)
可以同时去掉
∏
x
∈
S
n
x
\prod_{x\in S_n}x
∏x∈Snx,得到
a
ϕ
(
n
)
≡
1
(
m
o
d
n
)
a^{\phi(n)}\equiv 1\,\,(mod\,\,n)
aϕ(n)≡1(modn).
证毕.
费马小定理:若 n n n为素数且 a a a不是 n n n的倍数,则有 a n − 1 ≡ 1 ( m o d n ) a^{n-1}\equiv 1\,\,(mod\,\,n) an−1≡1(modn).
欧拉定理的推论:当 gcd ( a , n ) = 1 \gcd(a,n)=1 gcd(a,n)=1时, a k ≡ a k m o d ϕ ( n ) ( m o d n ) a^k\equiv a^{k\,\,mod\,\,\phi(n)}\,\,(mod\,\,n) ak≡akmodϕ(n)(modn).
扩展欧拉定理:若 k ≥ ϕ ( n ) k\geq \phi(n) k≥ϕ(n),则 a k ≡ a k m o d ϕ ( n ) + ϕ ( n ) ( m o d n ) a^{k}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n) ak≡akmodϕ(n)+ϕ(n)(modn).
证明:
为了证明这个定理,我们先证明
a
a
a为素数时定理成立:
设
n
=
a
r
n
′
n=a^{r}n'
n=arn′,其中
gcd
(
a
,
n
′
)
=
1
\gcd(a,n')=1
gcd(a,n′)=1,此时有:
a
ϕ
(
n
′
)
≡
1
(
m
o
d
n
′
)
a^{\phi(n')}\equiv 1\,\,(mod\,\,n')
aϕ(n′)≡1(modn′)
由于
ϕ
(
n
′
)
∣
ϕ
(
n
)
\phi(n')|\phi(n)
ϕ(n′)∣ϕ(n),有:
a
ϕ
(
n
)
≡
1
(
m
o
d
n
′
)
a^{\phi(n)}\equiv 1\,\,(mod\,\,n')
aϕ(n)≡1(modn′)
同时让两边和模数乘上
a
r
a^{r}
ar,得到:
a
ϕ
(
n
)
+
r
≡
a
r
(
m
o
d
n
)
a^{\phi(n)+r}\equiv a^{r}\,\,(mod\,\,n)
aϕ(n)+r≡ar(modn)
于是有:
a
k
+
r
≡
a
k
m
o
d
ϕ
(
n
)
+
r
(
m
o
d
n
)
a^{k+r}\equiv a^{k\,\,mod\,\,\phi(n)+r}\,\,(mod\,\,n)
ak+r≡akmodϕ(n)+r(modn)
显然有
k
≥
ϕ
(
n
)
=
(
a
−
1
)
a
r
−
1
ϕ
(
n
′
)
≥
r
k\geq \phi(n)=(a-1)a^{r-1}\phi(n')\geq r
k≥ϕ(n)=(a−1)ar−1ϕ(n′)≥r,所以有:
a
k
≡
a
r
+
k
−
r
≡
a
r
+
ϕ
(
n
)
+
(
k
−
r
)
m
o
d
ϕ
(
n
)
≡
a
r
m
o
d
ϕ
(
n
)
+
(
k
−
r
)
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
≡
a
k
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
(
m
o
d
n
)
a^{k}\equiv a^{r+k-r}\equiv a^{r+\phi(n)+(k-r)\,\,mod\,\,\phi(n)}\equiv a^{r\,\,mod\,\,\phi(n)+(k-r)\,\,mod\,\,\phi(n)+\phi(n)}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n)
ak≡ar+k−r≡ar+ϕ(n)+(k−r)modϕ(n)≡armodϕ(n)+(k−r)modϕ(n)+ϕ(n)≡akmodϕ(n)+ϕ(n)(modn)
至此我们证明了
a
a
a为素数的情况.
那么对于素数的幂
a
=
p
c
a=p^{c}
a=pc,有:
p
k
≡
p
k
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
(
m
o
d
n
)
⇒
(
p
k
)
c
≡
(
p
k
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
)
c
(
m
o
d
n
)
⇒
a
k
≡
a
k
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
(
m
o
d
n
)
p^{k}\equiv p^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n)\\ \Rightarrow (p^{k})^c\equiv (p^{k\,\,mod\,\,\phi(n)+\phi(n)})^{c}\,\,(mod\,\,n)\\ \Rightarrow a^{k}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n)
pk≡pkmodϕ(n)+ϕ(n)(modn)⇒(pk)c≡(pkmodϕ(n)+ϕ(n))c(modn)⇒ak≡akmodϕ(n)+ϕ(n)(modn)
对于任意一个数
a
a
a,直接写出它的唯一分解形式,会得到一些下面的式子:
(
p
i
c
i
)
≡
(
p
i
c
i
)
k
m
o
d
ϕ
(
n
)
+
ϕ
(
n
)
(
m
o
d
n
)
(p_i^{c_i})\equiv (p_i^{c_i})^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n)
(pici)≡(pici)kmodϕ(n)+ϕ(n)(modn)
把左右两边分别相乘即可得到原定理.
证毕.