φ(m),即小于m的m个数中与m互质的数的个数
这次讲φ(m)=m*(1-1/p1)*(1-1/p2)……
先点关注,不迷路
大家好,我是于斯为盛
先给大家道个歉,上次许诺要讲这个的,前一段有点忙,一直托到现在
这个证明稍微有点长
我们慢慢来
废话不多说
讲得不好勿喷~
证明分几步走,大家不要着急
若m1,m2互素,x,y分别跑遍m1,m2的完全剩余系
则xm2+ym1跑遍m1m2的完全剩余系
xi通过m1个整数
yi通过m2个整数
所以xim2+yim1通过m1m2个整数
我们只需证明这m1m2个整数对Mod m1m2两两不同余就可以
(因为m1m2的完全剩余系只有m1m2个整数)
任给x1 y1 x2 y2
xi跑遍m1的完全剩余系
yi跑遍m2的完全剩余系
假设x1m2+y1m1≡x2m2+y2m1 Mod m1m2
我们可得方程
x1m2+y1m1=x2m2+y2m1+km1m2(k不一定为正整数) 方程1
由方程1 Mod m1得
x1m2≡x2m2 Mod m1
由于(m1,m2)=1
可得x1≡x2 Mod m1
因为x1,x2跑遍m1的完全剩余系
所以x1=x2
由方程1 Mod m2得
y1m1≡y2m1 Mod m2
由于(m1,m2)=1
可得y1≡y2 Mod m2
因为y1,y2跑遍m2的完全剩余系
所以y1=y2
综上所述,方程1成立的条件是x1=x2且y1=y2
所以形如x1m2+x2m1的式子在Mod m1m2互不相等
证毕
证明完全剩余系是为了后续将简化剩余系写成这种形式
若m1,m2互素,x,y分别跑遍m1,m2的简化剩余系
则xm2+ym1跑遍m1m2的简化剩余系
由定理1可知
当x跑遍m1的完全剩余系
当y跑遍m2的完全剩余系
且(m1,m2)=1
xm2+ym1跑遍m1m1的完全剩余系
所以m1m2的简化剩余系可以写成xm2+ym1的形式
当(m1,m2)=1,(m1,x)=1时(即x跑遍m1的简化剩余系,y跑遍m2的简化剩余系)
所以(m2x,m1)=1
所以(m2x+m1y,m1)=1
同理可证(m2x+m1y,m2)=1
所以(m2x+m1y,m1m2)=1
即当x跑遍m1的简化剩余系,y跑遍m2的简化剩余系时
xm2+ym1包含在m1m2的简化剩余系中
当(m2x+m1y,m1m2)=1时
(m2x+m1y,m1)=1
(m2x,m1)=1
又有(m2,m1)=1
所以(x,m1)=1
同理可得(y,m2)=1
即当xm1+ym2跑遍m1m2的简化剩余系时
x包含在m1的简化剩余系,y包含在m2的简化剩余系
所以
x跑遍m1的简化剩余系,y跑遍m2的简化剩余系
等价于
xm1+ym2跑遍m1m2的简化剩余系
证毕
x通过φ(m1)个数
y通过φ(m2)个数
所以xm1+ym2通过φ(m1)×φ(m2)个数
又因为xm1+ym2通过φ(m1m2)个数(m1m2的简化剩余系)
所以当(m1,m2)=1时
φ(m1)×φ(m2)=φ(m1m2)
当p为素数时
φ(pe)=pe-pe-1
小于等于pe的正整数一共pe个数
而m为素数,即(pe,i)=1时必有 p|i
而美m个数中就有一个时m的倍数
所以与pe有公因子的数有pe/p=pe-1个
所以φ(p)=pe-pe-1
证毕
设:m=p1e1×p2e2……(唯一分解定理,pi为素数)
由定理2的推论可知
φ(m)=φ(p1e1×p2e2……)
=φ(p1e1)×φ(p2e2……)
=……
=φ(p1e1)×φ(p2e2)……
由定理3可知
φ(piei)=piei-piei-1=(1-1/piei)×piei
---------------------------^ 即同除piei再同乘piei
那么原式=φ(p1e1)×φ(p2e2)……
=(1-1/p1e1)×p1e1 ×(1-1/p2e2)×p2e2……
=(p1e1×p2e2……)×(1-1/p1e1)×(1-1/p2e2)……
=m×(1-1/p1e1)×(1-1/p2e2)……
证毕
void GenPhi(int &phi, int m){
Phi=_m;
int curM=_m;//为了和后面的控制变量区分开,我这里是把m设为全局变量
for(int i=2; i*i<=_m; i++){
if(_use[i]){
continue;//_use[i]是判断和数的数组
}
if(curM%i==0){
_fai/=i;
_fai*=i-1;//发现因子,*(1-1/pi^ei)
while(curM%i==0){
curM/=i;//除掉因子
//cout<
}
}
if(curM==1){
break;
}
for(int m=i; m*i<=10000; m++){
_use[i*m]=true;//标记合数
}
}
//cout<
if(curM!=1){
_phi/=curM;
_phi*=curM-1;
}
//cout<<_fai<
}
讲了这么多,欧拉函数也会求了
那么,它有什么用?
后续的应用给大家推荐一个
免费课程及附件.
我以后也应该会写
另外,大家不要忘了点个关注呀~
好了,差不多说完了
如果有 错误/优化/疑问 欢迎提出
WeChat:wxid_ffe28hxx677f32
(其实是我想认识大佬)
——by 于斯为盛