欧拉函数。
注意除了(1,1)之外的(x,y)都算两个。
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_N = 50001 + 10;
int phi[MAX_N];
void solve()
{
memset(phi,0,sizeof(phi));
phi[1] = 1;
for(int i = 2; i <= MAX_N; i++)
{
if(!phi[i])
{
for(int j = i; j <= MAX_N; j += i)
{
if(!phi[j])
phi[j] = j;
phi[j] = phi[j] / i * (i - 1);//*phi[j]保存不超过j且与j互质的正整数的个数*/
}
}
}
}
int main()
{
int n;
solve();
for(int i = 2; i < MAX_N; i++)
phi[i] = phi[i] + phi[i-1];
while(cin >> n, n)
cout << phi[n] * 2 - 1 << endl;
return 0;
}