思路:
对于每个n,结果就是2~n的欧拉函数之和。
代码:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define maxn 1000000
#define ll long long
int n;
vector<int> prm;
ll euler[maxn+5]={0};
void init() {
for(int i=2;i<=maxn;i++) euler[i]=i;
for(int i=2; i<=maxn; i++) {
if(euler[i]==i) {
euler[i]--;
for(int j=i*2;j<=maxn;j+=i){
euler[j]=euler[j]/i*(i-1);
}
}
}
for(int i=2;i<=maxn;i++) euler[i]+=euler[i-1];
}
int main(){
init();
while(~scanf("%d",&n)&&n){
printf("%lld\n",euler[n]);
}
return 0;
}