找出2-n的所有欧拉函数值相加就能得到答案
不过多亏了这道题没卡时
题目代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
typedef long long LL;
const int maxn=1000007;
int phi[maxn],prime[maxn];
bool check[maxn];
int cnt=0;
void euler(){
phi[1]=1;
for(int i=2;i<maxn;i++){
if(!check[i]){
prime[cnt++]=i;
phi[i]=i-1;
}
for(int j=0;j<cnt&&i*prime[j]<maxn;j++){
check[i*prime[j]]=true;
if(i%prime[j])
phi[i*prime[j]]=phi[i]*(prime[j]-1);
else{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
}
}
}
int main(){
int n;
euler();
while(scanf("%d",&n)){
if(n==0)break;
LL sum=0;
for(int i=2;i<=n;i++)
sum+=phi[i];
printf("%lld\n",sum);
}
return 0;
}