E.cpp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int> phi;
  4. void genPhi(int max) {
  5. int minDiv[max];
  6. for (int i = 1; i < max; i++) {
  7. minDiv[i] = i;
  8. }
  9. for (int i = 2; i * i < max; i++) {
  10. if (minDiv[i] == i) {
  11. for (int j = i * i; j < max; j += i) {
  12. minDiv[j] = i;
  13. }
  14. }
  15. }
  16. phi[1] = 1;
  17. for (int i = 2; i < max; i++) {
  18. phi[i] = phi[i / minDiv[i]];
  19. if ((i / minDiv[i]) % minDiv[i] == 0) {
  20. phi[i] *= minDiv[i];
  21. } else {
  22. phi[i] *= minDiv[i] - 1;
  23. }
  24. }
  25. }
  26. const int MAXN = 1000001;
  27. long long g[MAXN];
  28. int f[MAXN];
  29. int main() {
  30. // ofstream cout("output.txt");
  31. phi.resize(MAXN);
  32. genPhi(MAXN);
  33. for (int i = 1; i <= MAXN; i += 2) {
  34. f[i] = phi[i] % (i + 1);
  35. }
  36. g[0] = 0;
  37. for (int i = 1; i <= MAXN; i++) {
  38. g[i] = g[i - 1] + f[i];
  39. }
  40. int T;
  41. cin >> T;
  42. for (int t = 1; t <= T; t++) {
  43. int n;
  44. cin >> n;
  45. cout << "Case " << t << ": " << g[n] << endl;
  46. }
  47. }