找出1 - n 中所有与n互质的个数。
根据欧拉函数phi(n) = n * (1 - 1 / p1) * (1 - 1 / p2)...(1 - 1 / pn), 其中px为n的所有质因数。
#include <iostream>
using namespace std;
const int maxv = 50001;
void phi_table(int* phi) {
phi[1] = 1;
for(int i = 2; i <= maxv; i++) if(!phi[i]) {
for(int j = i; j <= maxv; j += i) {
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i * (i - 1);
}
}
}
int main() {
int n, phi[maxv], f[maxv];
phi_table(phi);
f[2] = phi[2];
for(int i = 3; i <= maxv; i++)
f[i] = phi[i] + f[i - 1];
while(cin >> n&& n)
cout << 2 * f[n] + 1 << endl;
return 0;
}