题意:
求前n项的欧拉函数之和
题解:
预处理出所有欧拉函数 赤裸裸的模版题- - 没什么好说的
代码:
#include <cstdio>
typedef long long ll;
const ll N=;
ll n,phi[N],pri[N],bo[N];
void makepri(){
for (ll i=;i<=N;i++){
if (!bo[i]){
pri[++pri[]]=i;
phi[i]=i-;
}
for (ll j=;j<=pri[] && i*pri[j]<=N;j++){
bo[i*pri[j]]=;
if (i%pri[j]) phi[i*pri[j]]=phi[i]*(pri[j]-);
else{
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
}
}
}
int main(){
makepri();
for (ll i=;i<=N;i++) phi[i]+=phi[i-];
while (scanf("%I64d",&n),n) printf("%I64d\n",phi[n]);
}