定义
在数论,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’s totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。
函数式
φ(x)=x∏i=1n(1−1pi)
其中
pi
为
x
的质因数
(x>0)
φ(x)
为
1→x
与x互质数的个数
性质
1. 对于任意一个质数
p
,
φ(n)=n−1
因为
n
为质数,与他互质的个数就是 n-1
2. 当
gcd(n,m)=1
时,
φ(nm)=φ(n)φ(m)
因为
φ(n)
是积性函数。 积性函数
指对于所有互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。
3. 若
n=pk
其中p为质数,则
φ(n)=pk−pk−1=(p−1)pk−1
1→n
中除了p的倍数,都与
pk
互质,
1→n
中
p
倍数的个数为
pk÷p=pk−1
4.
n=pk11pk22…pkm−1m−1pkmm
其中
pkmm
为
n
所分解的质因数(
km
为每个质因数的个数) ,则
φ(n)=n∏i=1m(1−1pi)
由性质3可得
φ(n)=∏i=1n(pi−1)pki−1i(pi|n)=(pk11pk22pk33…pkmm)∏i=1m(1−1pi)=n∏i=1m(1−1pi)
5. 所有小于
n
与
n
互质个数的和
sum=n×φ(n)2
首先证明
gcd(n,i)=1
,则
gcd(n,n−i)=1
利用反证法:
设存在
gcd(n,i)=1,gcd(n,n−i)=k
,那么可得
(n−i)%k=0,n%k=0
,所以
i%k=0
,即
gcd(n,i)=k
与假设矛盾,所以
gcd(n,i)=1
,则
gcd(n,n−i)=1
成立
由这个式子可得每个与
n
互质的数都是成对的,因为
gcd(n,i)=gcd(n,n−i)=1
,
i
和
(n−i)
成对,这样就可证明5性质
6. 如果
i
mod
p
=0,其中
p
为质数,则
φ(i∗p)=p∗φ(i)
,否则
φ(i∗p)=(p−1)φ(i)
对于前半部分,我们只需证明 如果
gcd(i,n)=1
则
gcd(i,n+i)=1
同上反证法:
设
gcd(i,n)=1,gcd(i,n+i)=k
设
n+i=ka1,i=ka2
,则
ka2+n=ka1,n=(a1−a2)k
,所以
gcd(i,n)>=k
,与假设矛盾,
gcd(i,n)=1
,则
gcd(i,n+i)=1
成立
有了上面那个式子就好证明了,因为 p为质数,所以与
i∗p
互质的数也就是
1→(i∗p)
与
i
互质的数的个数,这样就可以用上面那个定理了,设
n
是小于
i
且与
i
互质的数,则
gcd(i,n)=1
则
gcd(i,n+i)=gcd(i,n+2i)=gcd(i,n+3i)=⋯=gcd(i,n+(p−1)i)
也就是原来的
p
陪
后半部分更好证明,
i
与
p
互质,那就是性质2
7.
n=∑d|nφ(d)
(d|n)
指n是d的倍数
正规的推导看不懂,在搜了很多博客后看到了一种简单的证明方法
1n,2n,3n,4n,…,nn
一共n个分数,把所有数化简到最简分数,则每个分母都是n的因子,也就是说n 是所有分母的倍数,每个分母存在的数量就是
φ(i)
所有
φ(i)
的和也就是所有数的个数
n
8. 欧拉定理:对于互质的整数a,m,有
aφ(m)≡1
(mod m)。
证明
设小于
n
且与
n
互质的集合
Z
, 则
|Z|=φ(n),Z={q1,q2,q3…qm}
设集合
Y={a∗p1 mod m,a∗p2 mod m… a∗pφ(m}
我们只需证明
Y=Z
即可
因为
a
与
n
互质,
pi
与
n
互质,所以
a∗pi
与
n
互质,所以
a∗pi mod n∈Z
若
i != j
那么
a∗pi mod n != a∗pj mod n
一如既往的反证法:
设
a∗pi mod n = a∗pj mod n
,
a∗pi=ki∗n+b
,那么
a∗pi−a∗pj=ki∗n+b−kj∗n−b化简得a(pi−pj)=n(ki−kj) 进而得n=pi−pjki−kja
,这与
a n
互质矛盾,所以
i != j
那么
a∗pi mod n != a∗pj mod n
成立
因此我们可得
Z=Y
所以我们可以列出
a∗p1∗a∗p2∗⋯∗a∗pφ(n)≡p1∗p2∗⋯∗pφ(n)( mod n)→aφ(n)≡1 ( mod n)
费马小定理就是他的一种情况
a与p
互质时
ap−1≡1 ( mod p)
,这时候
φ(p)=p−1
带进去这个性质便可得
欧拉函数求法
应用
欧拉筛质数
板子 线性筛法中的p[]就是
欧拉降幂
公式
Ak≡Ak%φ(m)(mod m)gcd(A,m)=1
Ak≡Ak(mod m)gcd(A,m)!=1,k<φ(m)
Ak≡Ak%φ(m)+φ(m)(mod m)gcd(A,m)!=1,k>φ(m)
证明见:https://blog.csdn.net/weixin_38686780/article/details/81272848
看不懂,只好背公式,数学还是太垃圾了
板子
O(n)
,线性筛法
int p[maxn];
bool vis[maxn];
ll phi[maxn];
int cnt=0;
ll get_phi(int len=maxn){
phi[1]=1;
for(int i=2;i<len;i++){
if(!vis[i]){
p[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;j<cnt;j++){
if(p[j]*i>=len) break;
vis[p[j]*i]=1;
if(i%p[j]==0){
phi[i*p[j]]=p[j]*phi[i];
break;
}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
}
O(n−−√)
,适合求单点
ll get_phi(ll x){
ll res=x;
for(int i=2;i*i<=x;i++)
{
if(x%i==0){
res=res-res/i;
while(x%i==0) x/=i;
}
}
if(x!=1) res=res-res/x;
return res;
}
练习
BZOJ 3884 上帝与集合的正确用法 (
O(n−−√)
板子) 题解