欧拉函数
前言
本文纯属本蒟蒻的学习笔记,若要学更详细更专业的,请出门左拐
正文
欧拉函数,也就是
表示的是小于等于
当
求法
先说求法吧
首先,可以用定义求,复杂度
然后是单个求法
性质1:若
证明:
不与
(在
性质2:由唯一分解定理,设
证明:
好了,用这个就可以求了(就是求
复杂度
然后是求多个
线性筛!!!
用了三条性质
代码
void getphi(int n){
memset(vis,0, sizeof(vis));
memset(prime,0,sizeof(prime));
memset(phi,0,sizeof(phi));
int cnt = 0;
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]] = 1;
if (i % prime[j] == 0){//第二个条件
phi[i*prime[j]]=phi[i]*prime[j];break;
}
else phi[i*prime[j]]=phi[i]*(prime[j]-1);//第三个条件
}
}
}
多个的是
同时这个还可以求单个的,时间复杂度还是根号的
代码
for (int i = 2; i * i <= x; i++)
if (!(x % i)) {
pri[++t] = i;
phi *= (i - 1);
x /= i;
while (!(x % i)) phi *= i, x /= i;
}
if (x > 1)
phi *= (x - 1), pri[++t] = x;
其他性质
证明:
考虑小于或等于
对于每个
现在,我们考虑所有满足
所以,现在证明了
由于
欧拉定理
若
所以,当模数不是质数时求逆元,要约分至
后记
大概最重要的就是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探