欧拉函数的积性证明
欧拉函数即 φ \varphi φ函数
以下两段是从大佬那里淘来的证明
同样的, t ⊥ n m ⇔ t ⊥ n , t ⊥ m ⇔ ( t m o d n ) ⊥ n , ( t m o d m ) ⊥ m t\perp nm\Leftrightarrow t\perp n,t\perp m\Leftrightarrow(t\bmod n)\perp n,(t\bmod m)\perp m t⊥nm⇔t⊥n,t⊥m⇔(tmodn)⊥n,(tmodm)⊥m,所以每个 [ 1 , n m ] [1, nm] [1,nm]之间的与 n m nm nm互质的数 t t t都可以对应到一个 [ 1 , n ] [1,n] [1,n]的与 n n n互质的数 t m o d n t\bmod n tmodn和一个 [ 1 , m ] [1,m] [1,m]的与 m m m互质的数 t m o d m t\bmod m tmodm。
并且根据中国剩余定理,这种对应是一一对应的(即已知 a ⊥ n , b ⊥ m a\perp n, b\perp m a⊥n,b⊥m后可以唯一确定一个 [ 1 , n m ] [1,nm] [1,nm]之间的 t t t使得 t m o d n = a , t m o d m = b t\bmod n=a, t\bmod m=b tmodn=a,tmodm=b,且 t ⊥ n m t\perp nm t⊥nm)。因此 φ ( n m ) = φ ( n ) φ ( m ) \varphi(nm)=\varphi(n)\varphi(m) φ(nm)=φ(n)φ(m) 。
然而我看不懂……还是从定义上来证明吧!
假设有两个互质的正整数 n , m n,m n,m,则
φ ( n ) = n ∏ ( 1 − 1 p i ) \varphi(n)=n\prod(1-\frac{1}{p_i}) φ(n)=n∏(1−pi1)
φ ( m ) = m ∏ ( 1 − 1 p i ′ ) \varphi(m)=m\prod(1-\frac{1}{p_{i'}}) φ(m)=m∏(1−pi′1)
φ ( n ) φ ( m ) = n ∏ ( 1 − 1 p i ) m ∏ ( 1 − 1 p i ′ ) = n m ∏ ( 1 − 1 p i ) ∏ ( 1 − 1 p i ′ ) \varphi(n)\varphi(m)=n\prod(1-\frac1{p_i})m\prod(1-\frac1{p_{i'}})=nm\prod(1-\frac1{p_i})\prod(1-\frac1{p_{i'}}) φ(n)φ(m)=n∏(1−pi1)m∏(1−pi′1)=nm∏(1−pi1)∏(1−pi′1)
因为 n , m n,m n,m互质,所以 p i p_i pi和 p i ′ p_{i'} pi′各各都不相同,且都是 n m nm nm的质因子
因此就可以推出 φ ( n m ) = φ ( n ) φ ( m ) \varphi(nm)=\varphi(n)\varphi(m) φ(nm)=φ(n)φ(m)
至此,积性函数的性质得证。但是由上面的证明可知, n , m n,m n,m必须要互质才可以满足欧拉函数是积性函数,由此可见欧拉函数不是完全积性函数
线性筛欧拉函数
友情提示:建议先学习线性筛素数再来学习,在此不会讲线性筛的基本操作
线性筛欧拉函数可以分为三种情况:
- i i i是质数时, φ ( i ) = n − 1 \varphi(i)=n-1 φ(i)=n−1,根据质数的性质,在 1 ∼ i 1\sim i 1∼i中,有 i − 1 i-1 i−1个与 i i i互质的数,所以质数 i i i的欧拉函数就是 i − 1 i-1 i−1
- i m o d p [ j ] ≠ 0 i\bmod p[j]\neq 0 imodp[j]=0时,说明 i i i和 p [ j ] p[j] p[j]互质, φ ( i × p [ j ] ) = φ ( i ) φ ( p [ j ] ) \varphi(i\times p[j])=\varphi(i)\varphi(p[j]) φ(i×p[j])=φ(i)φ(p[j])(因为 p [ j ] p[j] p[j]是质数,所以 φ ( p [ j ] ) \varphi(p[j]) φ(p[j])也可以写成 p [ j ] − 1 p[j]-1 p[j]−1,代码里写的是 φ ( p [ j ] ) \varphi(p[j]) φ(p[j]))
- i m o d p [ j ] = 0 i\bmod p[j]=0 imodp[j]=0时, φ ( i ∗ p [ j ] ) = φ ( i ) ∗ p [ j ] \varphi(i*p[j])=\varphi(i)*p[j] φ(i∗p[j])=φ(i)∗p[j](从欧拉函数定义来证明,表示我也不会)
代码如下:
int phi[A], p[A], cnt;
//phi欧拉函数,p质数数组,cnt记录质数个数
bool vis[A];//为1即为合数,为0则为质数
void getphi() {
phi[1] = 1;
for (int i = 2; i <= n; i++) {
if (!vis[i]) p[++cnt] = i, phi[i] = i - 1;
for (int j = 1; j <= cnt && i * p[j] <= n; j++) {
vis[i * p[j]] = 1;
if (i % p[j] == 0) { phi[i * p[j]] = phi[i] * p[j]; break; }
else phi[i * p[j]] = phi[i] * phi[p[j]];//互质,利用欧拉函数的积性
}
}
}
本文介绍了欧拉函数的积性性质,并通过两种不同的证明方式来展示这一特性,尤其是当两个正整数互质时。同时,文章探讨了线性筛在计算欧拉函数中的应用,分为三种情况详细阐述,并提供了相应的代码实现。

2483

被折叠的 条评论
为什么被折叠?



