AcWing 874. 筛法求欧拉函数 (埃式筛欧拉函数)
原题链接
简单
作者:
NumPy
,
2021-03-16 14:16:21
,
所有人可见
,
阅读 240
埃式筛
$O(nlogn)$
C++ 代码
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
typedef long long LL;
const int N = 1000010;
LL sum;
int phi[N];
bool st[N];
int n;
void euler(int n){
for(int i = 1; i <= n; i++) phi[i] = i;
for(int i = 2; i <= n; i++){
if(!st[i]){
for(int j = i; j <= n; j += i){
st[j] = true;
phi[j] = phi[j] / i * (i - 1);
}
}
}
}
int main(){
scanf("%d", &n);
euler(n);
for(int i = 1; i <= n; i++) sum += phi[i];
printf("%lld\n", sum);
return 0;
}