欧拉函数
互质:(前置知识)
对于
∀
a
,
b
∈
N
\forall a,b\in N
∀a,b∈N 若
g
c
d
(
a
,
b
)
=
1
,
a
,
b
gcd(a,b)=1,a,b
gcd(a,b)=1,a,b互质
定义
我们定义
ϕ
(
N
)
\phi (N)
ϕ(N)为
[
1
,
N
]
[1,N]
[1,N] 中与
N
N
N 互质的个数,称作欧拉函数。
(注意:尽管1既不是质数也不是合数 ,但我们定义
ϕ
(
1
)
=
1
\phi (1)=1
ϕ(1)=1)
性质1
若
x
x
x 是质数 ,那么
ϕ
(
x
)
=
x
−
1
\phi (x)=x-1
ϕ(x)=x−1
证明:
除了质数本身的数都与它互质
性质2
∀
n
>
1
,
[
1
,
n
]
\forall n>1,[1,n]
∀n>1,[1,n]中所有与n互质的数的和为
n
∗
ϕ
(
n
)
/
2
n*\phi(n)/2
n∗ϕ(n)/2
证明:由于
g
c
d
(
n
,
x
)
=
g
c
d
(
n
,
n
gcd(n,x)=gcd(n,n
gcd(n,x)=gcd(n,n%
x
)
x)
x) (不清楚这个性质的同学可以在我的“同余总结中看详细证明”) 所以我们可以得到:
g
c
d
(
n
,
x
)
=
g
c
d
(
n
,
n
−
x
)
gcd(n,x)=gcd(n,n-x)
gcd(n,x)=gcd(n,n−x)
这说明与
n
n
n 不互质的数
x
,
n
−
x
x,n-x
x,n−x 成对出现 ,而这两个数的平均值为
n
/
2
n/2
n/2
因此我们得到 与
n
n
n 互质的数的平均值也是
n
/
2
n/2
n/2 (所有小于
n
n
n的数的平均值为
n
/
2
n/2
n/2)
性质3
欧拉函数是积性函数,也就是对于两个互质的数
a
,
b
a,b
a,b有
ϕ
(
a
∗
b
)
=
ϕ
(
a
)
∗
ϕ
(
b
)
\phi(a*b)=\phi(a)*\phi(b)
ϕ(a∗b)=ϕ(a)∗ϕ(b)
(我没有特别好的严谨推导证明,有想法的同学可以联系我研讨)
性质4
若一个数
x
=
p
c
i
x=p^{c_i}
x=pci(
p
p
p为质数),那么有
ϕ
(
x
)
=
(
p
c
−
p
c
−
1
)
\phi(x)=(p^c-p^{c-1})
ϕ(x)=(pc−pc−1)
证明:除了
p
p
p 的倍数与
x
x
x 不互质以外,其他的数都与
x
x
x 互质
p
p
p 的倍数的个数为
p
c
p
=
p
c
−
1
\frac{p^c}{p}=p^{c-1}
ppc=pc−1
证得
ϕ
(
x
)
=
(
p
c
−
p
c
−
1
)
\phi(x)=(p^c-p^{c-1})
ϕ(x)=(pc−pc−1)
性质5
用算数的基本定理将
N
N
N 分解为
N
=
p
1
c
1
p
2
c
2
.
.
.
p
n
c
n
N=p_1^{c_1}p_2^{c_2}...p_n^{c_n}
N=p1c1p2c2...pncn
那么 ϕ ( N ) = N ∗ ( ∏ 质 数 p ∣ N ( 1 − 1 p ) ) \phi(N)=N*(\prod\limits_{质数p|N}(1-\frac{1}{p})) ϕ(N)=N∗(质数p∣N∏(1−p1))
这里给出两种证明方法
证法1:
设
p
,
q
p,q
p,q为
N
N
N 的质因子,因为该质因子的倍数与
N
N
N不互质 所以我们要去掉这
(
N
p
)
(\frac{N}{p})
(pN)与
(
N
q
)
(\frac{N}{q})
(qN)个数,又因为,其中
p
∗
q
p*q
p∗q的倍数的数被删去了两次 那么我们需要加回
(
N
p
∗
q
)
(\frac{N}{p*q})
(p∗qN)
所以我们得到 N − N p − N q + N p ∗ q = N ( 1 − 1 p − 1 q + 1 p ∗ q ) = N ( 1 − 1 p ) ( 1 − 1 q ) N-\frac{N}{p}-\frac{N}{q}+\frac{N}{p*q}=N(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{p*q})=N(1-\frac{1}{p})(1-\frac{1}{q}) N−pN−qN+p∗qN=N(1−p1−q1+p∗q1)=N(1−p1)(1−q1)
将两个质因子推开到多个质因子,用数学归纳法,证毕。
证法2:
由性质3得到
ϕ
(
x
)
=
∏
i
=
1
n
ϕ
(
p
i
c
i
)
\phi(x)=\prod\limits^{n}_{i=1}\phi(p^{c^i}_i)
ϕ(x)=i=1∏nϕ(pici)
由性质4得到
ϕ
(
x
)
=
∏
i
=
1
n
(
p
c
i
−
p
c
i
−
1
)
\phi(x)=\prod\limits^{n}_{i=1}(p^{c_i}-p^{{c_i}-1})
ϕ(x)=i=1∏n(pci−pci−1)
=
∏
i
=
1
n
p
c
i
(
1
−
1
p
i
)
=\prod\limits^{n}_{i=1}p^{c_i}(1-\frac{1}{p_i})
=i=1∏npci(1−pi1)
=
x
∗
∏
i
=
1
n
(
1
−
1
p
i
)
=x*\prod\limits^{n}_{i=1}(1-\frac{1}{p_i})
=x∗i=1∏n(1−pi1)
证毕。
性质6
若
p
p
p为
x
x
x的约数(
p
p
p是质数),那么有
ϕ
(
x
∗
p
)
=
ϕ
(
x
)
∗
p
\phi(x*p)=\phi(x)*p
ϕ(x∗p)=ϕ(x)∗p
证明:
考虑一下我们证明的性质5
将
p
p
p 乘上之后
∏
i
=
1
n
(
1
−
1
p
i
)
\prod\limits^{n}_{i=1}(1-\frac{1}{p_i})
i=1∏n(1−pi1)不变 ,而前面的
x
x
x会变为
x
∗
p
x*p
x∗p
性质7
若
p
p
p 不是
x
x
x 的约数(
p
p
p是质数)
ϕ
(
x
∗
p
)
=
ϕ
(
x
)
∗
(
p
−
1
)
\phi(x*p)=\phi(x)*(p-1)
ϕ(x∗p)=ϕ(x)∗(p−1)
因为
p
,
x
p,x
p,x互质
ϕ
(
p
)
=
p
−
1
\phi(p)=p-1
ϕ(p)=p−1 由性质3欧拉函数是积性函数可知
ϕ
(
x
∗
p
)
=
ϕ
(
p
)
∗
ϕ
(
x
)
=
ϕ
(
x
)
∗
(
p
−
1
)
\phi(x*p)=\phi(p)*\phi(x)=\phi(x)*(p-1)
ϕ(x∗p)=ϕ(p)∗ϕ(x)=ϕ(x)∗(p−1)
求解单个欧拉函数
用程序实现性质5求解过程即可.
void eular(long long n){
ou=n;
for(long long i=2;i*i<=n;i++){
if(n%i==0){
ou=ou/i*(i-1);
while(n%i==0) n/=i;
}
}
if(n!=1) ou=ou/(n)*(n-1);
}
求解一系列欧拉函数代码
p
p
p 不是
i
i
i的一个约数 性质7得
ϕ
(
x
∗
p
)
=
ϕ
(
x
)
∗
(
p
−
1
)
\phi(x*p)=\phi(x)*(p-1)
ϕ(x∗p)=ϕ(x)∗(p−1)
p
p
p 是
i
i
i 的一个约数 性质6 得
ϕ
(
x
∗
p
)
=
ϕ
(
x
)
∗
p
\phi(x*p)=\phi(x)*p
ϕ(x∗p)=ϕ(x)∗p
for(int i=2;i<=n;i++){
// cnt是质数的个数 p是质数数组 v记录最小质因数
//phi 记录欧拉函数值
if(!v[i]){
cnt++; v[i]=i; p[cnt]=i phi[i]=i-1;
}
for(int j=1;j<=cnt;j++){
if(p[j]*i>n) break;
v[i*p[j]]=p[j];
if(i%p[j]) phi[i*p[j]]*(p[j]-1);
else{
phi[i*p[j]]=phi[i]*p[j];
break;
}
}
}