欧拉函数相关

一.欧拉函数的定义.

欧拉函数:定义欧拉函数 ϕ ( n ) \phi(n) ϕ(n)表示 [ 1 , n ] [1,n] [1,n]中与 n n n互质的数的个数,即:
ϕ ( n ) = ∑ i = 1 n [ gcd ⁡ ( n , i ) = 1 ] \phi(n)=\sum_{i=1}^{n}[\gcd(n,i)=1] ϕ(n)=i=1n[gcd(n,i)=1]

所以下次看到这个式子就知道是个欧拉函数的定义式了.

这个东西与剩余系的关系参见同余理论相关.


二.单个欧拉函数的计算.

根据定义,单个欧拉函数 ϕ ( n ) \phi(n) ϕ(n)需要 O ( n ) O(n) O(n)的时间才能计算,但我们可以更快.

欧拉函数计算公式:设唯一分解式 n = ∏ i = 1 k p i c i n=\prod_{i=1}^{k}p_i^{c_i} n=i=1kpici,则有:
ϕ ( n ) = n ∏ i = 1 k p i − 1 p i \phi(n)=n\prod_{i=1}^{k}\frac{p_i-1}{p_i} ϕ(n)=ni=1kpipi1

证明:
考虑用容斥计算欧拉函数,设唯一分解 n = ∏ i = 1 k p i c i n=\prod_{i=1}^{k}p_i^{c_i} n=i=1kpici,我们可以得到:
ϕ ( n ) = ∑ T ⊆ [ k ] ( − 1 ) ∣ T ∣ n ∏ i ∈ T p i \phi(n)=\sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i} ϕ(n)=T[k](1)TiTpin

现在我们要证明的是:
∑ T ⊆ [ k ] ( − 1 ) ∣ T ∣ n ∏ i ∈ T p i = n ∏ i = 1 k p i − 1 p i \sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}=n\prod_{i=1}^{k}\frac{p_i-1}{p_i} T[k](1)TiTpin=ni=1kpipi1

考虑数学归纳法:
1.对于 k = 1 , 2 k=1,2 k=1,2的情况,显然结论成立.
2.对于 k > 2 k>2 k>2的情况,若在 k < m k<m k<m时结论成立,则 k = m k=m k=m时有:
∑ T ⊆ [ k ] ( − 1 ) ∣ T ∣ n ∏ i ∈ T p i = ∑ T ⊆ [ k − 1 ] ( − 1 ) ∣ T ∣ n ∏ i ∈ T p i − ∑ T ⊆ [ k − 1 ] ( − 1 ) ∣ T ∣ n p k ∏ i ∈ T p i = n ( ∏ i = 1 k − 1 p i − 1 p i − 1 p k ∏ i = 1 k − 1 p i − 1 p i ) = n ∏ i = 1 k p i − 1 p i \sum_{T\subseteq [k]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}\\ =\sum_{T\subseteq [k-1]}(-1)^{|T|}\frac{n}{\prod_{i\in T}p_i}-\sum_{T\subseteq [k-1]}(-1)^{|T|}\frac{n}{p_k\prod_{i\in T}p_i}\\ =n\left(\prod_{i=1}^{k-1}\frac{p_i-1}{p_i}-\frac{1}{p_k}\prod_{i=1}^{k-1}\frac{p_i-1}{p_i}\right)\\ =n\prod_{i=1}^{k}\frac{p_i-1}{p_i} T[k](1)TiTpin=T[k1](1)TiTpinT[k1](1)TpkiTpin=n(i=1k1pipi1pk1i=1k1pipi1)=ni=1kpipi1

证毕.

根据这个性质,我们可以在 O ( n ) O(\sqrt{n}) O(n )的时间复杂度内求单个 ϕ ( n ) \phi(n) ϕ(n).

代码如下:

int Get_phi(int n){
  int res=n,now=n;
  for (int i=2;i*i<=n;++i)
    if (now%i==0)
      for (res=res/i*(i-1);now%i==0;now/=i);
  if (now>1) res=res/now*(now-1);
  return res;
}



三.欧拉函数若干性质.

性质1:欧拉函数是一个积性函数,即 gcd ⁡ ( a , b ) = 1 ⇒ ϕ ( a b ) = ϕ ( a ) ϕ ( b ) \gcd(a,b)=1\Rightarrow \phi(ab)=\phi(a)\phi(b) gcd(a,b)=1ϕ(ab)=ϕ(a)ϕ(b).

证明:
我们让 P P P代表素数集,那么有:
ϕ ( a b ) = a b ∏ p ∈ P ∧ p ∣ a b p − 1 p = a ∏ p ∈ P ∧ p ∣ a p − 1 p ∗ b ∏ p ∈ P ∧ p ∣ b p − 1 p = ϕ ( a ) ϕ ( b ) \phi(ab)=ab\prod_{p\in P\wedge p|ab}\frac{p-1}{p}\\ =a\prod_{p\in P\wedge p|a}\frac{p-1}{p}*b\prod_{p\in P\wedge p|b}\frac{p-1}{p}\\ =\phi(a)\phi(b) ϕ(ab)=abpPpabpp1=apPpapp1bpPpbpp1=ϕ(a)ϕ(b)

证毕.

性质1的推论:设唯一分解 n = ∏ i = 1 k p i c i n=\prod_{i=1}^{k}p_i^{c_i} n=i=1kpici,则有:
ϕ ( n ) = ∏ i = 1 k ϕ ( p i c i ) \phi(n)=\prod_{i=1}^{k}\phi(p_i^{c_i}) ϕ(n)=i=1kϕ(pici)

性质2 ∑ d ∣ n ϕ ( n ) = n \sum_{d|n}\phi(n)=n dnϕ(n)=n.

证明:
首先我们构造函数 f ( n ) f(n) f(n)为:
f ( n ) = ∑ d ∣ n ϕ ( n ) f(n)=\sum_{d|n}\phi(n) f(n)=dnϕ(n)

容易发现这是一个积性函数,所以有:
gcd ⁡ ( x , y ) = 1 ⇒ f ( x y ) = f ( x ) f ( y ) \gcd(x,y)=1\Rightarrow f(xy)=f(x)f(y) gcd(x,y)=1f(xy)=f(x)f(y)

此时我们可以把 n n n写成唯一分解形式 n = ∏ i = 1 k p i c i n=\prod_{i=1}^{k}p_i^{c_i} n=i=1kpici,容易发现现在只需要证明:
∑ d ∣ p i c i ϕ ( d ) = p i c i \sum_{d|p_i^{c_i}}\phi(d)=p_i^{c_i} dpiciϕ(d)=pici

于是有:
∑ d ∣ p i c i ϕ ( d ) = ∑ j = 0 c i ϕ ( p i j ) = 1 + ∑ j = 0 c i − 1 ( p i − 1 ) p i j = 1 + ( p i − 1 ) 1 − p i c i 1 − p i = 1 + p i c i − 1 = p i c i \sum_{d|p_i^{c_i}}\phi(d)=\sum_{j=0}^{c_i}\phi(p_i^{j})\\ =1+\sum_{j=0}^{c_i-1}(p_i-1)p_i^{j}\\ =1+(p_i-1)\frac{1-p_i^{c_i}}{1-p_i}\\ =1+p_i^{c_i}-1\\ =p_i^{c_i} dpiciϕ(d)=j=0ciϕ(pij)=1+j=0ci1(pi1)pij=1+(pi1)1pi1pici=1+pici1=pici

证毕.

性质3 n > 1 ⇒ ∑ i ∈ [ 1 , n ] ∧ gcd ⁡ ( n , i ) = 1 i = n ϕ ( n ) 2 n>1\Rightarrow \sum_{i\in [1,n]\wedge \gcd(n,i)=1}i=\frac{n\phi(n)}{2} n>1i[1,n]gcd(n,i)=1i=2nϕ(n).

证明:
gcd ⁡ ( n , i ) = 1 ⇔ gcd ⁡ ( i , n − i ) = 1 \gcd(n,i)=1\Leftrightarrow \gcd(i,n-i)=1 gcd(n,i)=1gcd(i,ni)=1

也就是说对于满足条件的数有 ϕ ( n ) \phi(n) ϕ(n)个,并且若有 gcd ⁡ ( n , i ) = 1 \gcd(n,i)=1 gcd(n,i)=1,必然有 gcd ⁡ ( n , n − i ) = 1 \gcd(n,n-i)=1 gcd(n,ni)=1,此时两两配对得到 i + ( n − i ) = n i+(n-i)=n i+(ni)=n,对数为 ϕ ( n ) 2 \frac{\phi(n)}{2} 2ϕ(n),乘起来就可以证明.
证毕.


四.线性筛欧拉函数.

我们可以用线性筛做到 O ( n ) O(n) O(n)求出 [ 1 , n ] [1,n] [1,n]上的所有欧拉函数.

具体来说,我们在线性筛的时候分三种情况:
1. p p p为素数时, ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1.
2. p p p n p np np的最小素因子且 p ∤ n p\nmid n pn时, ϕ ( n p ) = ϕ ( n ) ϕ ( p ) = ( p − 1 ) ϕ ( n ) \phi(np)=\phi(n)\phi(p)=(p-1)\phi(n) ϕ(np)=ϕ(n)ϕ(p)=(p1)ϕ(n).
3. p p p n p np np的最小素因子且 p ∣ n p|n pn时, ϕ ( n p ) = p ϕ ( n ) \phi(np)=p\phi(n) ϕ(np)=pϕ(n).

然后我们就可以写出线性筛欧拉函数的代码:

int n,b[N+9],pr[N+9],cp;
int phi[N+9];

void Sieve(){
  phi[1]=1;
  for (int i=2;i<=n;++i){
  	if (!b[i]) pr[++cp]=i,phi[i]=i-1;
  	for (int j=1;j<=cp&&i*pr[j]<=n;++j){
  	  int t=i*pr[j];
  	  b[t]=1;
  	  if (i%pr[j]==0) {phi[t]=phi[i]*pr[j];break;}
  	  phi[t]=phi[i]*(pr[j]-1);
  	}
  }
}



五.欧拉定理.

欧拉定理 gcd ⁡ ( n , a ) = 1 ⇒ a ϕ ( n ) = 1    ( m o d    n ) \gcd(n,a)=1\Rightarrow a^{\phi(n)}=1\,\,(mod\,\,n) gcd(n,a)=1aϕ(n)=1(modn).

证明:
n n n的简化剩余系为 S n S_n Sn,由于 S n S_n Sn和模 n n n意义下的乘法构成一个群,所以有:
x ∈ S n ⇒ a x    m o d    n ∈ S n x , y ∈ S ∧ x ≠ y ⇒ a x ≢ a y    ( m o d    n ) x\in S_n\Rightarrow ax\,\,mod\,\,n\in S_n\\ x,y\in S\wedge x\neq y\Rightarrow ax\not\equiv ay\,\,(mod\,\, n) xSnaxmodnSnx,ySx=yaxay(modn)

那么显然 S n ′ = { a x    m o d    n ∣ x ∈ S n } S'_n=\{ax\,\,mod\,\,n|x\in S_n\} Sn={axmodnxSn} S n S_n Sn同是 n n n的简化剩余系.

那么就有:
a ϕ ( n ) ∏ x ∈ S n x ≡ ∏ x ∈ S n a x ≡ ∏ x ∈ S n x    ( m o d    n ) a^{\phi(n)}\prod_{x\in S_n}x\equiv \prod_{x\in S_n}ax\equiv \prod_{x\in S_n}x\,\,(mod\,\,n) aϕ(n)xSnxxSnaxxSnx(modn)

可以同时去掉 ∏ x ∈ S n x \prod_{x\in S_n}x xSnx,得到 a ϕ ( n ) ≡ 1    ( m o d    n ) a^{\phi(n)}\equiv 1\,\,(mod\,\,n) aϕ(n)1(modn).
证毕.

费马小定理:若 n n n为素数且 a a a不是 n n n的倍数,则有 a n − 1 ≡ 1    ( m o d    n ) a^{n-1}\equiv 1\,\,(mod\,\,n) an11(modn).

欧拉定理的推论:当 gcd ⁡ ( a , n ) = 1 \gcd(a,n)=1 gcd(a,n)=1时, a k ≡ a k    m o d    ϕ ( n )    ( m o d    n ) a^k\equiv a^{k\,\,mod\,\,\phi(n)}\,\,(mod\,\,n) akakmodϕ(n)(modn).

扩展欧拉定理:若 k ≥ ϕ ( n ) k\geq \phi(n) kϕ(n),则 a k ≡ a k    m o d    ϕ ( n ) + ϕ ( n )    ( m o d    n ) a^{k}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n) akakmodϕ(n)+ϕ(n)(modn).

证明:
为了证明这个定理,我们先证明 a a a为素数时定理成立:
n = a r n ′ n=a^{r}n' n=arn,其中 gcd ⁡ ( a , n ′ ) = 1 \gcd(a,n')=1 gcd(a,n)=1,此时有:
a ϕ ( n ′ ) ≡ 1    ( m o d    n ′ ) a^{\phi(n')}\equiv 1\,\,(mod\,\,n') aϕ(n)1(modn)

由于 ϕ ( n ′ ) ∣ ϕ ( n ) \phi(n')|\phi(n) ϕ(n)ϕ(n),有:
a ϕ ( n ) ≡ 1    ( m o d    n ′ ) a^{\phi(n)}\equiv 1\,\,(mod\,\,n') aϕ(n)1(modn)

同时让两边和模数乘上 a r a^{r} ar,得到:
a ϕ ( n ) + r ≡ a r    ( m o d    n ) a^{\phi(n)+r}\equiv a^{r}\,\,(mod\,\,n) aϕ(n)+rar(modn)

于是有:
a k + r ≡ a k    m o d    ϕ ( n ) + r    ( m o d    n ) a^{k+r}\equiv a^{k\,\,mod\,\,\phi(n)+r}\,\,(mod\,\,n) ak+rakmodϕ(n)+r(modn)

显然有 k ≥ ϕ ( n ) = ( a − 1 ) a r − 1 ϕ ( n ′ ) ≥ r k\geq \phi(n)=(a-1)a^{r-1}\phi(n')\geq r kϕ(n)=(a1)ar1ϕ(n)r,所以有:
a k ≡ a r + k − r ≡ a r + ϕ ( n ) + ( k − r )    m o d    ϕ ( n ) ≡ a r    m o d    ϕ ( n ) + ( k − r )    m o d    ϕ ( n ) + ϕ ( n ) ≡ a k    m o d    ϕ ( n ) + ϕ ( n )    ( m o d    n ) a^{k}\equiv a^{r+k-r}\equiv a^{r+\phi(n)+(k-r)\,\,mod\,\,\phi(n)}\equiv a^{r\,\,mod\,\,\phi(n)+(k-r)\,\,mod\,\,\phi(n)+\phi(n)}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n) akar+krar+ϕ(n)+(kr)modϕ(n)armodϕ(n)+(kr)modϕ(n)+ϕ(n)akmodϕ(n)+ϕ(n)(modn)

至此我们证明了 a a a为素数的情况.
那么对于素数的幂 a = p c a=p^{c} a=pc,有:
p k ≡ p k    m o d    ϕ ( n ) + ϕ ( n )    ( m o d    n ) ⇒ ( p k ) c ≡ ( p k    m o d    ϕ ( n ) + ϕ ( n ) ) c    ( m o d    n ) ⇒ a k ≡ a k    m o d    ϕ ( n ) + ϕ ( n )    ( m o d    n ) p^{k}\equiv p^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n)\\ \Rightarrow (p^{k})^c\equiv (p^{k\,\,mod\,\,\phi(n)+\phi(n)})^{c}\,\,(mod\,\,n)\\ \Rightarrow a^{k}\equiv a^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n) pkpkmodϕ(n)+ϕ(n)(modn)(pk)c(pkmodϕ(n)+ϕ(n))c(modn)akakmodϕ(n)+ϕ(n)(modn)

对于任意一个数 a a a,直接写出它的唯一分解形式,会得到一些下面的式子:
( p i c i ) ≡ ( p i c i ) k    m o d    ϕ ( n ) + ϕ ( n )    ( m o d    n ) (p_i^{c_i})\equiv (p_i^{c_i})^{k\,\,mod\,\,\phi(n)+\phi(n)}\,\,(mod\,\,n) (pici)(pici)kmodϕ(n)+ϕ(n)(modn)

把左右两边分别相乘即可得到原定理.
证毕.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值