欧拉函数算n以内的质数。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;
int vis[50010], sum[50010];
void ol()
{
memset(vis, 0, sizeof(vis));
sum[0] = 0; vis[1] = 1;
for(int i = 2; i <= 50000; i++)
if(!vis[i])
for(int j = i; j <= 50000; j+=i)
{
if(!vis[j]) vis[j] = j;
vis[j] = vis[j]/i*(i-1);
}
for(int i = 1; i <= 50000; i++)
sum[i] = sum[i-1]+vis[i];
}
int main()
{
int n;
ol();
while(cin >> n, n)
cout << sum[n]*2-1 << endl;
return 0;
}