欧拉函数(互质)
定义:
欧拉函数是指:一个数N,在1~N这个范围内,与N互质的数的“个数”记作 (N)
互质是指gcd(i,N) = 1
因为一个数总能被分解为:N = P*P*P*....*P
且欧拉函数为一个积性函数:(mn) = (m) * (n)
所以我们可以得到(N) = (P)*(P)*(P)*......*(P)
对于其中的某一项(P)分析:从1到P共有P个数,其中与P不互质的有P,2*P,3*P.....P*P共有P项,所以互质的就有P-P项,所以我们可以得到公式
(N) = N * (1-)*(1-)*.....*(1-)
代码实现:
- 朴素算法(公式法):
void solve() { int x; cin>>x; int res = x; for(int i = 2;i <= x/i;++i){ if(x%i == 0){ while(x%i == 0) x/= i; res = res/i*(i-1); } } if(x>1) res = res/x*(x-1); cout<<res<<endl; }
2.线性筛法
以上解释引用自Sundae
int primes[N],cnt;//线性筛 int phi[N];//欧拉函数 bool st[N]; void get_eulers(int n){ phi[1] = 1; for(int i = 2;i <= n;++i){ if(!st[i]){ primes[cnt++] = i; phi[i] = i-1; } for(int j = 0;primes[j]<=n/i;++j){ st[primes[j]*i] = true; if(i%primes[j] == 0){ phi[primes[j]*i] = primes[j]*phi[i]; break; } phi[primes[j]*i] = phi[i]*(primes[j]-1); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】