欧拉函数 int x; cin>>x; long long res=x; for(int i=2;i<=x/i;i++) { if(x%i==0) { res = res/i*(i-1); while(x%i==0) { x/=i; } } } if(x>1) res = res/x*(x-1); 线性筛求欧拉函数之和 const int N = 1e6 + 5; int primes[N],res[N],cnt; bool vis[N]; long long get_eulers(int n) { long long ans=0; res[1] = 1; for(int i=2;i<=n;i++) { if(!vis[i]) { primes[cnt++]=i; res[i] = i-1; } for(int j=0;primes[j]<=n/i;j++) { vis[primes[j]*i]=true; if(i%primes[j]==0) { res[primes[j]*i]=primes[j]*res[i]; break; } res[primes[j]*i]=res[i]*(primes[j]-1); } } for(int i=1;i<=n;i++) ans+=res[i]; return ans; }