nicuvlad76

Untitled

Nov 25th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4.  
  5. using namespace std;
  6.  
  7. ifstream f("cmmdc.in");
  8. ofstream g("cmmdc.out");
  9. #define f cin
  10. #define g cout
  11. const int NMAX = 1e6 + 1, MOD = 1e9 + 7;
  12.  
  13. int N;
  14.  
  15. int phi[NMAX];
  16. int sum_prod[NMAX];
  17.  
  18. int sp[NMAX];
  19.  
  20. void Load ()
  21. {
  22. f >> N;
  23.  
  24. return;
  25. }
  26.  
  27. void indicatorEuler()
  28. {
  29. for(int i = 2; i <= N; ++i)
  30. phi[i] = (i - 1);
  31.  
  32. for(int i = 2; i <= (N >> 1); ++i)
  33. if(phi[i] > 0)
  34. for(int j = (i << 1); j <= N; j += i)
  35. phi[j] -= phi[i];
  36.  
  37. return;
  38. }
  39.  
  40. void Multiply (int &a, long long b)
  41. {
  42. a = (1LL * a * b) % (1LL * MOD);
  43.  
  44. return;
  45. }
  46.  
  47. void Add (int &a, int b)
  48. {
  49. a = (a + b) % MOD;
  50.  
  51. return;
  52. }
  53.  
  54. void Initializare ()
  55. {
  56. indicatorEuler();
  57.  
  58. for(int i = 3; i <= N; ++i)
  59. {
  60. int sum = ((1LL * i * phi[i]) >> (1LL)) % (1LL * MOD);
  61. sum --;
  62. if(sum < 0) sum += MOD;
  63.  
  64. sum_prod[i] = (1LL * sum * i) % (1LL * MOD);
  65. }
  66.  
  67. for(int i = 3; i <= N; ++i) ///sume partiale ca sa ramanem in O(1) la calculul factorului pentru un c fixat
  68. sp[i] = sp[i - 1], Add(sp[i], sum_prod[i]);
  69.  
  70. return;
  71. }
  72.  
  73. void Solve ()
  74. {
  75. Initializare();
  76.  
  77. int ans = 0;
  78.  
  79. for(int c = 1; c <= (N / 3); ++c)
  80. {
  81. int termen = 1;
  82.  
  83. Multiply(termen, 2LL * c * c * c);
  84. Multiply(termen, sp[N / c]);
  85.  
  86. Add(ans, termen);
  87. }
  88.  
  89. g << ans << '\n';
  90.  
  91. return;
  92. }
  93.  
  94. int main()
  95. {
  96. Load();
  97.  
  98. Solve();
  99.  
  100. return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment