欧拉函数
参考博客
欧拉函数:
定义:
欧拉函数是指
即
特别的
性质:
1.若
质数除了他本身都与他互质。
2.
因为
,所以与 不互质的数 成对出现,平均值为 ,所以与 互质的数的平均值也是 ,而这样的数共有 个,故得性质2。
3.若
发现所有
的倍数都与 不互质,其他数都与 互质,而 的倍数共有 个(包括 )。 故
4.若
如果
与 互质 , 与 互质 , 与 互质 ,则 与数对 是一一对应的。 符合条件的
有 种, 有 种, 则所对应的 数对有 种。而符合条件的 有 种。 所以
5.对于一正整数
证明:
6.若
的质数集合 ,与 的质数集合相比没有变化。
7.若质数
设
当
时:
即
为质数
代码:
1.求解单个欧拉函数:利用性质
代码
int phi(int n) {
int ans = n;
int t = sqrt(n);
for(int i=2; i<=t; ++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;
}
- 埃氏筛求
的欧拉函数值,时间复杂度
代码
void found_euler(int n) {
for(int i=1; i<=n; ++i) phi[i] = i;
for(int i=2; i<=n; ++i) {
if(phi[i] == i) { // i为质数
for(int j=i; j<=n; j+=i) // 给包含质因子i的数字,乘上 (1-1/i)
phi[j] = phi[j]/i*(i-1);
}
}
}
3.欧拉筛求
代码
int phi[N],pr[N],cnt;
bool vis[N];
void init(){
int n=1e5+50;
phi[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){pr[++cnt]=i,phi[i]=i-1;}
for(int j=1;j<=cnt&&pr[j]<=n/i;j++){
vis[i*pr[j]]=1;
phi[i*pr[j]]=phi[i]*((i%pr[j])?pr[j]-1:pr[j]);
if(i%pr[j]==0)break;
}
}
}
GCD SUM
求
原式可化为
GCD:
给定正整数
Longge 的问题
求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探