给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和。
输入格式
共一行,包含一个整数 n。
输出格式
共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和。
数据范围
1≤n≤
输入样例:
6
输出样例:
12
代码:
#include<iostream>
using namespace std;
const int N = 1000010;
int n,cnt;
int phi[N],att[N],Primes[N];
long long Get_eulers(int n){
long long res = 0;
phi[1] = 1;
for(int i = 2; i <= n;i ++){
if(att[i] == 0){
Primes[cnt] = i;
cnt++;
phi[i] = i - 1;
}
for(int j = 0;Primes[j] <= n / i;j++){
att[i * Primes[j]] = 1;
if(i % Primes[j] == 0){
phi[i * Primes[j]] = phi[i] * Primes[j];
break;
}else{
phi[i * Primes[j]] = phi[i] * (Primes[j] - 1);
}
}
}
for(int i = 0;i <= n;i ++){
res += phi[i];
}
return res;
}
int main(){
cin>>n;
long long ans = Get_eulers(n);
cout<<ans<<endl;
return 0;
}