D.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. }