Source: POJ 2478 Farey Sequence
Enter n to calculate phi (2) + phi (3) + phi (4) +... + phi (n)
Idea: Calculate phi (1), phi (2),..., phi (n) and then obtain the prefix and
# Include
# Include
# Include
// Euler's phi function const int maxn = 1000010; typedef long LL; int euler_phi (int n) {int m = sqrt (n + 0.5); int ans = n; for (int I = 2; I <= m; I ++) {if (n % I = 0) {ans = ans/I * (I-1 ); while (n % I = 0) n/= I;} if (n> 1) ans = ans/n * (n-1); return ans ;} LL phi [maxn]; void phi_table (int n) {for (int I = 2; I <= n; I ++) phi [I] = 0; phi [1] = 0; for (int I = 2; I <= n; I ++) if (! Phi [I]) for (int j = I; j <= n; j + = I) {if (! Phi [j]) phi [j] = j; phi [j] = phi [j]/I * (I-1);} int main () {int n; phi_table (1000000); for (int I = 2; I <= 1000000; I ++) phi [I] + = phi [I-1]; while (scanf ("% d", & n) printf ("% lld \ n", phi [n]); return 0 ;}