专栏文章

欧拉系列(详细证明!)

算法·理论参与者 73已保存评论 84

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
84 条
当前快照
1 份
快照标识符
@mhz5txny
此快照首次捕获于
2025/11/15 01:57
4 个月前
此快照最后确认于
2025/11/29 05:25
3 个月前
查看原文
后台显示没炸,前台看着炸公式了,可以点以下链接去看

文章内容

  • 欧拉函数
  • 欧拉函数常用性质
  • 欧拉定理
  • 扩展欧拉定理
  • 线性筛法
  • 欧拉反演

欧拉函数

  • 定义
    欧拉函数是 小于等于 x的数中与x 互质 的数的 数目
    符号 φ(x)\varphi(x)
    互质 两个互质的数的最大公因数等于1,1与任何数互质
  • 通式
    φ(x)=xi=1n(11pi)\varphi(x)=x\prod_{i=1}^n(1-\frac{1}{p_i}) 其中pip_inn的质因子,nnxx的因子个数

欧拉函数常用性质

  • nn 为质数,显然φ(n)=n1\varphi(n)=n-1 \begin{aligned}\end{aligned}
  • 欧拉函数是积性函数 积性函数: 对于任意 互质 的整数 aabb 有性质f(ab)=f(a)f(b)f(ab)=f(a)·f(b)的数论函数。 若m,nm,n互质,φ(mn)=φ(m)φ(n)\varphi(mn)=\varphi(m)·\varphi(n) \begin{aligned}\end{aligned}
  • 如果x=2nx=2n(nn为奇数),φ(x)=φ(n)\varphi(x)=\varphi(n)φ(2n)=φ(n)\varphi(2n)=\varphi(n)(nn为奇数) n为奇数时,n与2互质,φ(2)=1\varphi(2)=1 \begin{aligned}\end{aligned}
  • pp为质数,则φ(pk)=pkpk1\varphi(p^k)=p^k-p^{k-1} 因为与pkp^k不互质的只有pp的倍数,而pkp^kpp的倍数有pk1p^{k-1}\begin{aligned}\end{aligned}
  • x>2x>2时,φ(x)\varphi(x)为偶数 这一点需要了解更相减损术 即gcd(n,x)=gcd(n,nx)gcd(n,x)=gcd(n,n-x) 由该公式我们可以知道,所有与nn互质的数都是成对出现的 \begin{aligned}\end{aligned}
  • 小于n的数中,与n互质的数的总和为φ(n)n/2  (n>1)\varphi(n)*n/2\ \ (n>1) 由上面的证明(更相减损术)我们知道,每一对与nn互质的数的和为nn,共有φ(n)/2\varphi(n)/2\begin{aligned}\end{aligned}
  • n=dnφ(d)n=\sum_{d|n}\varphi(d)nn的因数((包括11和它自己))的欧拉函数之和等于nn 这条性质的运用又叫 欧拉反演 定义函数 f(n)=dnφ(d)\begin{aligned}f(n)=\sum_{d|n}\varphi(d)\end{aligned}
    • f(n)f(n)为积性函数 f(n)f(m)=inφ(i)jmφ(j)=injmφ(i)φ(j)=injmφ(ij)=dnmφ(d)=f(nm)\begin{aligned}f(n)·f(m)=\sum_{i|n}\varphi(i)\sum_{j|m}\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i)·\varphi(j)=\sum_{i|n}\sum_{j|m}\varphi(i·j)=\sum_{d|nm}\varphi(d)=f(nm)\end{aligned}
    f(pk)=φ(1)+φ(p)+φ(p2)++φ(pk)=1+(p1)+(p2p)++(pkpk1)=pkf(p^k)=\varphi(1)+\varphi(p)+\varphi(p^2)+\cdots+\varphi(p^k)=1+(p-1)+(p^2-p)+\cdots+(p^k-p^{k-1})=p^k
    n=p1k1p2k2pmkmn=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m}
    f(n)=f(p1k1)f(p2k2)f(pmkm)=p1k1p2k2pmkm=nf(n)=f(p_1^{k_1})·f(p_2^{k_2})·\cdots·f(p_m^{k_m})=p_1^{k_1} ·p_2^{k_2}· \cdots·p_m^{k_m}=n \begin{aligned}\end{aligned}

欧拉定理

a,ma,m互质,aφ(m)1(mod m)a^{\varphi(m)}≡1(mod\ m)
  • 证明
    • 剩余系 指对于某一个特定的正整数nn,一个整数集中的数mod nmod\ n所得的余数域。
      • 完全剩余系mZ+m\in Z+,若r0r_0,r1...r_1... rm1r_{m-1}mm个整数,并且两两模mm不同余,则r0r_0,r1...r_1... rm1r_{m-1}叫作模mm的一个完全剩余系。
      • 缩系AAmod nmod\ n的剩余系,若任意AA中两个元素相乘mod nmod\ n后仍为AA中的元素,则称AAmod nmod\ n的缩系
      • a,ma,m互质,则mm的一个缩系为 {x1,x2,x3...xφ(m)}\{x_1,x_2,x_3...x_{\varphi(m)}\} {ax1%m,ax2%m,ax3%m...axφ(m)%m}\{ax_1\%m,ax_2\%m,ax_3\%m...ax_{\varphi(m)}\%m\}也是mod mmod\ m的缩系 于是可以得到 i=1φ(m)axii=1φ(m)xi (mod m)\sum_{i=1}^{\varphi(m)}ax_i\equiv \sum_{i=1}^{\varphi(m)}x_i\ (mod\ m) aφ(m)i=1φ(m)xii=1φ(m)xi (mod m)a^{\varphi(m)}\sum_{i=1}^{\varphi(m)}x_i\equiv \sum_{i=1}^{\varphi(m)}x_i\ (mod\ m) aφ(m)1 (mod m)a^{\varphi(m)}\equiv 1\ (mod\ m)
        • 而当mm为质数时,φ(m)=m1\varphi(m)=m-1 a(m1)1(mod m)a^{(m-1)}≡1(mod\ m) 这就是我们熟知的 费马小定理
  • 变式 a,ma,m互质abab%φ(m)(mod m)a^b≡a^{b\%\varphi(m)}(mod\ m)

扩展欧拉定理

b>φ(m)b>\varphi(m) 即使a,ma,m不互质abab%φ(m)+φ(m)(mod m)a^b≡a^{b \%\varphi(m)+\varphi(m)}\left(mod\ m\right)
  • 证明 从mm中提一个质因子pp出来 令m=pksm=p^k·sgcd(pk,s)=1gcd(p^k,s)=1,即pk,sp^k,s互质 根据欧拉定理,我们知道pφ(s)1(mod s)p^{\varphi(s)}≡1(mod\ s) 根据欧拉函数是积性函数,我们知道φ(s)φ(m)\varphi(s)|\varphi(m)所以有pφ(m)pφ(s)(mod s)p^{\varphi(m)}≡p^{\varphi(s)}(mod\ s)pφ(s)=xs+1p^{\varphi(s)}=xs+1 那么pφ(s)+k=xm+pkp^{\varphi(s)+k}=xm+p^k 所以pφ(s)+kpk(mod m)p^{\varphi(s)+k}≡p^k (mod\ m),也有pφ(m)+kpk(mod m)p^{\varphi(m)+k}≡p^k (mod\ m)bkb\geq k时,pbpbkpkpbkpφ(s)+kpb+φ(m)(mod m)p^b≡p^{b-k}·p^k≡p^{b-k}·p^{\varphi(s)+k}≡p^{b+\varphi(m)}(mod\ m) 又因为kφ(pk)φ(m)k\leq\varphi(p^k)\leq\varphi(m),所以当b2φ(m)b\geq 2\varphi(m)时,满足pbpbφ(m)(mod m)p^b≡p^{b-\varphi(m)}(mod\ m) 注意是2φ(m)2\varphi(m)! 所以可以得到pbpb%φ(m)+φ(m)(mod m)p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m) 因此我们可以得到对任意质数pp都有b2φ(m),pbpb%φ(m)+φ(m)(mod m)b\geq 2\varphi(m),p^b≡p^{b\%\varphi(m)+\varphi(m)}(mod\ m)mm质因子的pp,有欧拉定理 将aa因式分解,可以得到 abab%φ(m)+φ(m)(mod m)a^b≡a^{b\%\varphi(m)+\varphi(m)}(mod\ m)
    • 注意 b<φ(m)b<\varphi(m)时,公式不一定成立

线性筛法

类似与筛素数,我们在这里利用欧拉函数是积性函数这个性质来筛φ\varphi
Code\mathcal{Code}
CPP
int cnt;
int prime[maxn],phi[maxn];
bool vis[maxn];
void Euler_sieve (int n)
{
	phi[1]=1;
	for (int i=2;i<=n;++i){
		if (!vis[i])	prime[++cnt]=i,phi[i]=i-1;
		for (int j=1;j<=cnt&&i*prime[j]<=n;++j){
			vis[i*prime[j]]=true;
			if (i%prime[j]==0){	phi[i*prime[j]]=phi[i]*prime[j];break;}
			phi[i*prime[j]]=phi[i]*phi[prime[j]];
		}
	}
} 

欧拉反演

本来没有欧拉反演这个名字的,只不过大家习惯性称之为欧拉反演 所谓欧拉反演其实就是利用欧拉函数的一条性质 n=dnφ(d)\begin{aligned}n=\sum_{d|n}\varphi(d)\end{aligned} (上面有证明) 我们试着把nn换成其他东西试试 gcd(i,j)=dgcd(i,j)φ(d)=didjφ(d)\begin{aligned}gcd(i,j)=\sum_{d|gcd(i,j)}\varphi(d)=\sum_{d|i}\sum_{d|j}\varphi(d)\end{aligned} 让我们求个东西试试 i=1ngcd(i,n)=i=1ndidnφ(d)=dni=1ndiφ(d)=dnndφ(d)\begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{i=1}^n\sum_{d|i}\sum_{d|n}\varphi(d)=\sum_{d|n}\sum_{i=1}^n\sum_{d|i}\varphi(d)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned} 把它重写一遍作为结论 i=1ngcd(i,n)=dnndφ(d)\begin{aligned}\sum_{i=1}^ngcd(i,n)=\sum_{d|n}\frac{n}{d}\varphi(d)\end{aligned}
感谢
@Everything_will_die
@bcr_233
@Pour
@渣渣lyz
指出错误,已更正,博主最近电脑被控制,不能及时回复,敬请原谅

评论

84 条评论,欢迎与作者交流。

正在加载评论...