欧拉函数及定理
来源:互联网 发布:sql更新多个字段 编辑:程序博客网 时间:2024/04/28 14:11
ps:文章篇幅较长=_=(像我这种蒟蒻的证明当然又臭又长),请善用目录^_^
欧拉函数
定义
欧拉函数φ(n)表示1~n中所有与n互质的数。比如1~8中与8互质的数有1,3,5,7,所以φ(8)=4。
公式
ps:关于简系请移步剩余类、完系及简系。
公式1:如果p是素数,有φ(p)=p-1,这个很显然。
公式2(积性):如果(a,b)=1,有φ(a*b)=φ(a)*φ(b),证明如下:
设模a的一个简系为
现在我们要证明:所有
1.
2.
3.对于任意k满足(k,a*b)=1,则一定有
证明1:
因为(a,
所以1得证。
证明2:
假设存在
所以
因为
又因为(a,b)=1,
即
也就是说
所以2得证。
证明3:
设
因为(k,a*b)=1,根据辗转相除法,得:
(x*b+y*a,a*b)=(x*b+y*a+t*a*b,a*b)=(k,a*b)=1
所以(x*b+y*a,a)=1,(x*b+y*a,b)=1,
根据辗转相除法,得(x*b,a)=1,(y*a,b)=1
因为(a,b)=1,所以(x,a)=1,(y,b)=1
所以x是a简系中的数,y是b简系中的数,即一定有
所以3得证。
综上所述:所有
所以φ(n)是积性函数(但不是完全积性,因为要满足(a,b)=1)。
有了这个公式,就可以推得欧拉函数的通项公式。
因为
φ(n)=φ(
现在需要知道φ(
因为p是质数,所以除了p的倍数之外,1~
公式3:φ(
代回原式,得:
φ(n)=
而n=
φ(n)=
这就是欧拉函数的通项公式。
求法
1.唯一分解
如果只求φ(n),那么我们就直接将n唯一分解处理出每一个n的素数,然后用通项公式就行了。
效率:
int phi(int n){ int sq=sqrt(n),ans=n; for (int i=2;i<=sq;i++) if (n%i==0) { ans=ans/i*(i-1); while (n%i==0) n/=i; } if (n>1) ans=ans/n*(n-1); return ans;}
2.筛法
如果要求φ(1~n),用唯一分解就比较慢了,所以我们可以用筛法求出φ(1~n),原理和筛素数是一样的。这里给出普通筛法以及线性筛法,但是要注意普通筛法用到的是通项公式,而线性筛法用到公式1、积性和公式3:
效率:
void make_phi(int n){ memset(phi,0,sizeof(phi));phi[1]=1; for (int i=2;i<=n;i++) if (!phi[i]) for (int j=1;j<=n/i;j++) { if (!phi[i*j]) phi[i*j]=i*j; phi[i*j]=phi[i*j]/i*(i-1); }}
效率:
int make_phi(int n){ memset(vis,1,sizeof(vis));vis[0]=vis[1]=false; phi[1]=1; for (int i=2;i<=n;i++) { if (vis[i]) p[++p[0]]=i,phi[i]=i-1; //用公式1 for (int j=1;j<=p[0]&&p[j]*i<=n;j++) { vis[p[j]*i]=false; if (i%p[j]) phi[p[j]*i]=phi[p[j]]*phi[i]; else //i和p[j]互质,用积性 {phi[p[j]*i]=p[j]*phi[i];break;} //i是p[j]倍数,用公式3 } }}
拓展
1~n与n互质的所有数的和为:
n=1:n*φ(n)/2+1/2=1
n>1:n*φ(n)/2
其实很好求:如果(x,n)=1,那么(n-x,n)=1。也就是说与n互质的数是成对出现的,那么显然这些数的和为n*φ(n)/2(1比较特殊,需要特判)。
欧拉定理
内容
如果(a,p)=1,有
由于当p是素数时φ(p)=p-1,所以
证明
设p的一个简系为
因为(a,p)=1,所以
所以
即
所以
因为(
所以
所以
欧拉定理得证。
- 欧拉函数及定理
- 欧拉定理与函数
- 欧拉函数与欧拉定理
- 欧拉函数与欧拉定理
- 欧拉函数&&欧拉定理
- 欧拉定理,欧拉函数
- 欧拉函数与欧拉定理
- 欧拉函数/欧拉定理
- 欧拉函数和欧拉定理
- 欧拉函数,欧拉定理模板
- POJ3696【欧拉函数+欧拉定理】
- 欧拉函数与欧拉定理
- 欧拉定理 和 欧拉函数
- 欧拉函数与欧拉定理
- 欧拉函数与欧拉定理
- 欧拉函数、欧拉定理、费马小定理
- 欧拉函数、费马定理、欧拉定理
- 原根,欧拉函数,欧拉定理,费马小定理
- 文章标题
- 文章标题
- gcc常用命令选项
- Java包装类型
- 删除Python框架
- 欧拉函数及定理
- java适配器设计模式
- Linux学习第三篇--Linux的文件系统
- 字符串处理技术之辨别字符串(用户名是否正确)
- 基础技术篇 6 —— NB-IOT技术(一)
- Maven的核心概念
- 由Spring引出的一些瞎想(1)
- 不全局安装vue-cli使用vue脚手架
- 汇编语言(第三版)课程设计1