#include<iostream>
using namespace std;
const int N=1e6+10;
int n,cnt;
int prime[N];
bool st[N];
int phi[N];
void get_eulers(int n){
phi[1]=1;
for(int i=2;i<=n;i++){
if(!st[i]){
prime[cnt++] = i;
phi[i] = i-1;
}
for(int j=0;prime[j]<=n/i;j++){
int t=prime[j]*i;
st[t]=true;
if(i%prime[j]==0){
phi[t] = phi[i] * prime[j];
break;
}
phi[t] = phi[i] * (prime[j]-1);
}
}
long long int res=0;
for(auto t:phi) res += t;
printf("%lld",res);
}
int main(){
scanf("%d",&n);
get_eulers(n);
}
线性筛法求欧拉函数(c++实现)
最新推荐文章于 2024-01-24 21:05:59 发布