x
=
∑
i
=
1
p
i
k
i
x=\sum_{i=1}p_i^{k_i}
x=∑i=1piki,
p
i
p_i
pi 为
x
x
x 的第
i
i
i 个质因子,
k
i
>
0
k_i>0
ki>0 。
则 欧拉函数
φ
(
x
)
=
x
∗
∏
i
=
1
(
1
−
1
p
i
)
\varphi (x) = x*\prod_{i=1}(1-\frac{1}{p_i})
φ(x)=x∗∏i=1(1−pi1)
证明:
欧拉函数即小于
n
n
n 且与
n
n
n 互质的数的个数,由容斥原理得
φ
(
x
)
=
n
−
∑
n
p
i
+
∑
n
p
i
p
j
−
∑
n
p
i
p
j
p
k
+
.
.
.
\varphi (x) = n-\sum\frac{n}{p_i}+\sum\frac{n}{p_ip_j}-\sum\frac{n}{p_ip_jp_k}+...
φ(x)=n−∑pin+∑pipjn−∑pipjpkn+...,化简即得上式。
筛法求欧拉函数:
线性筛中用每个合数的最小质因子筛掉它,可以通过这点去求出每个数的欧拉函数,设当前合数为
x
x
x,则
x
=
p
1
k
1
p
2
k
2
p
3
k
3
.
.
.
x = p_1^{k_1}p_2^{k_2}p_3^{k_3}...
x=p1k1p2k2p3k3...,
p
1
p_1
p1 为最小质因子,
k
>
0
k>0
k>0
φ
(
x
)
=
x
(
1
−
1
p
1
)
(
1
−
1
p
2
)
(
1
−
1
p
3
)
.
.
.
\varphi (x) = x(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3})...
φ(x)=x(1−p11)(1−p21)(1−p31)...
设
t
=
x
/
p
1
t = x/p_1
t=x/p1
当t中含有质因子
p
1
p_1
p1 时,
φ
(
t
)
=
t
(
1
−
1
p
1
)
(
1
−
1
p
2
)
(
1
−
1
p
3
)
.
.
.
\varphi (t) = t(1-\frac{1}{p_1})(1-\frac{1}{p_2})(1-\frac{1}{p_3})...
φ(t)=t(1−p11)(1−p21)(1−p31)...
容易看出
φ
(
x
)
=
φ
(
t
)
∗
p
1
\varphi (x) =\varphi (t)*p_1
φ(x)=φ(t)∗p1
当t中不含有质因子
p
1
p_1
p1 时,
φ
(
t
)
=
t
(
1
−
1
p
2
)
(
1
−
1
p
3
)
.
.
.
\varphi (t) = t(1-\frac{1}{p_2})(1-\frac{1}{p_3})...
φ(t)=t(1−p21)(1−p31)...
得
φ
(
x
)
=
φ
(
t
)
∗
p
1
∗
(
1
−
1
p
1
)
=
φ
(
t
)
∗
(
p
1
−
1
)
\varphi (x) =\varphi (t)*p_1*(1-\frac{1}{p_1}) = \varphi (t)*(p_1-1)
φ(x)=φ(t)∗p1∗(1−p11)=φ(t)∗(p1−1)
此处的
t
t
t 即为以下代码中的
i
i
i
int p[N], phi[N], cntp;
bool isp[N];
void ol(int mx)
{
memset(isp, true, sizeof(bool) * (mx + 1));
isp[0] = isp[1] = false;
phi[1] = 1;
for (int i = 2; i <= mx; i++)
{
if (isp[i])
{
p[++cntp] = i;
phi[i] = i - 1;
}
for (int j = 1; p[j] <= mx / i; j++)
{
int x = p[j] * i;
isp[x] = false;
if (i % p[j] == 0)
{
phi[x] = phi[i] * p[j];
break;
}
else phi[x] = phi[i] * (p[j] - 1);
}
}
}
应用:
对于互质的两个正整数
a
,
n
a,n
a,n 都有
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi{(n)}}\equiv 1\ (mod \ n)
aφ(n)≡1 (mod n)
证明:设1到n中与n互质的数为
b
1
,
b
2
,
.
.
.
,
b
φ
(
n
)
b_1,b_2,...,b_{\varphi{(n)}}
b1,b2,...,bφ(n)
将其中每个数乘以a并取模n后得到新的数组
a
b
1
%
n
,
a
b
2
%
n
,
.
.
.
,
a
b
φ
(
n
)
%
n
ab_1\%n,ab_2\%n,...,ab_{\varphi{(n)}}\%n
ab1%n,ab2%n,...,abφ(n)%n
新生成的数组中没有相同的数,这个用反证法证明,
假设有两个数相同即
a
b
i
≡
a
b
j
ab_i\equiv ab_j
abi≡abj
得到
b
i
≡
b
j
b_i\equiv b_j
bi≡bj,与前提矛盾,得证。
对于新的数组,其中没有相同的数,同时所有数还是与n互质的,所以两个数组是相同的集合,就只是排列顺序不同,所以两个数组的乘积同余,即
∏
i
=
1
φ
(
n
)
b
i
≡
∏
i
=
1
φ
(
n
)
a
b
i
(
m
o
d
n
)
\prod_{i=1}^{\varphi{(n)}} b_i \equiv \prod_{i=1}^{\varphi{(n)}} ab_i \ (mod \ n)
∏i=1φ(n)bi≡∏i=1φ(n)abi (mod n)
∏
i
=
1
φ
(
n
)
b
i
≡
a
φ
(
n
)
∏
i
=
1
φ
(
n
)
b
i
(
m
o
d
n
)
\prod_{i=1}^{\varphi{(n)}} b_i \equiv a^{\varphi{(n)}}\prod_{i=1}^{\varphi{(n)}} b_i \ (mod \ n)
∏i=1φ(n)bi≡aφ(n)∏i=1φ(n)bi (mod n)
所以:
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi{(n)}}\equiv 1\ (mod \ n)
aφ(n)≡1 (mod n)
证毕。
如有错误欢迎指正。