「欧拉函数」学习笔记
欧拉函数表示整数中与互质的数的个数。
特殊情况
1.
2. 当为素数时,.
3. 若是素数的次幂,
(除掉的倍数即可,由于,故共有个的倍数)
性质1. 当互质时,
这就是欧拉函数的积性性质。欧拉函数是积性函数
设有质数,则按照刚才的方法,总数减去的倍数与的倍数,再加上重复减掉的的公倍数。
的倍数有,总共有个。
同理的倍数有个。
由于,,的倍数有,总共有个
因此我们得到
然后再按照刚才的思路,分开考虑:
故
这两个式子是一模一样的,所以
所以
性质2. 欧拉函数的通式
证明:刚才我们得到了,又得到了欧拉函数的积性性质,也可以以此类推三个,四个……
因此对于任意一个,我们可以对进行质因数分解:
对于这个,我们依然使用这个方法,得到
因此就得到了
因此我们得到通式
有了通式,我们就可以求欧拉函数了:
int a,b,n,phi[N]; main(){ n = r; if(n == 2){ printf("1"); return 0; } for(int i = 1; i <= n; ++i) phi[i] = i; for(int i = 2; i <= n; ++i){ if(phi[i] != i) continue; for(int j = i; j <= n; j += i) phi[j] = phi[j]/i*(i-1); } printf("%lld", phi[n]); return 0; }
以上代码复杂度是的,顺便充当筛素数了。如果则说明是素数。然后对之内所有以为因子的数都记性上述公式描绘的操作。注意到我们先做了,然后再做乘。这样是为了避免数据过大而造成数据丢失。
性质3. (x, p为整数)
证明:由通式可得
观察通式我们发现,一个数的欧拉函数其实只和其各个素因数的种类有关,并不关心每种素因数有几个。那么只需要证明,也就是 包含了与的所有种类的素因数 就好了。
那么由于,说明是的约数,所以的所有约数必然包括在之内,所以的所有种类的素因数都是的所有种类的素因数是必然的。
所以我们可以继续推:
总结一下,当为质数时:若,可以利用性质5推得。否则,又因为是质数,所以一定互质,所以用性质6就可以推得。因此当为质数时,无论如何都可以推得,因此我们可以利用在线性筛素数的基础上线性完成欧拉函数的求解。
/* * phi[i]用来表示欧拉函数 * isprime[i]用来记录i是否是质数 * p数组用来存质数 */ int n,tot; int phi[N],isprime[N],p[N]; int main(){ n = r; phi[1] = 1; for(int i = 2; i <= n; ++i){ if(!isprime[i]){ p[++tot] = i; phi[i] = i-1; //若i是质数,则根据特殊情况2, \varphi(i) = i-1 } for(int j = 1; j <= tot; ++j){ if(i * p[j] > n) break; //越界 isprime[i * p[j]] = 1; //存在因子i和p[j],故一定不是质数 if(i % p[j] == 0){ phi[i * p[j]] = phi[i] * p[j]; /*性质5*/ break; /*p[j]是i的素因子之一。由于i % p[j] == 0,所以p[j]也是i的素因子之一。 *因为p数组是递增的,因此p[j+1] > p[j],而i内包括了p[j]。p[j]已经作为i * p[j]的素因子了, *所以p[j+1]就一定不是它的最小素因子了。 */ } else phi[i * p[j]] = phi[i] * (p[j] - 1); /*利用性质6,p[j]是质数*/ } } printf("%d",phi[n]); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)