运用素数筛选的思想求欧拉函数。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=40000;
int p[maxn+100];
void init(){
p[1]=1;
for(int i=2;i<=maxn;i++){
if(!p[i]){
for(int j=i;j<=maxn;j+=i){
if(!p[j]) p[j]=j;
p[j]=p[j]/i*(i-1);
}
}
}
}
int main(){
int i,j,k;
init();
for(i=2;i<=40000;i++) p[i]+=p[i-1];
int n;
scanf("%d",&n);
printf("%d\n",p[n-1]*2+1);
return 0;
}
^_^