Advertisement
999ms

Untitled

Nov 12th, 2019
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define all(x) (x).begin(),(x).end()
  3.  
  4. using namespace std;
  5. using ll = long long;
  6.  
  7. const ll mod = 1e9 + 7;
  8.  
  9. ll fastPow(ll a, ll p) {
  10.     ll ans = 1;
  11.     while (p) {
  12.         if (p & 1) {
  13.             ans *= a;
  14.             ans %= mod;
  15.         }
  16.         a *= a;
  17.         a %= mod;
  18.         p >>= 1;
  19.     }
  20.     return ans;
  21. }
  22.  
  23. const int MSIZE = 1e6 + 1;
  24.  
  25. int t[MSIZE];
  26. int q[MSIZE];
  27.  
  28. int main() {
  29.     ios_base::sync_with_stdio(false);
  30.     cin.tie(nullptr);
  31.     cout.tie(nullptr);
  32.     int n;
  33.     cin >> n;
  34.     vector<int> arr(n);
  35.     for (int i = 0; i < n; i++) {
  36.         cin >> arr[i];
  37.         t[arr[i]]++;
  38.     }
  39.     for (int i = 1; i < MSIZE; i++) {
  40.         for (int j = i + i; j < MSIZE; j += i) {
  41.             t[i] += t[j];
  42.             t[i] %= mod;
  43.         }
  44.     }
  45.     for (int i = 1; i < MSIZE; i++) {
  46.         q[i] = (mod + fastPow(2, t[i]) - 1) % mod;
  47.     }
  48.     for (int i = MSIZE - 1; i >= 1; i--) {
  49.         for (int j = i + i; j < MSIZE; j += i) {
  50.             q[i] -= q[j];
  51.             q[i] %= mod;
  52.             if (q[i] < 0) q[i] += mod;
  53.         }
  54.     }
  55.     ll answer = 0;
  56.     for (int i = 1; i < MSIZE; i++) {
  57.         answer += i * 1ll * q[i] % mod;
  58.         answer %= mod;
  59.     }
  60.     cout << answer << endl;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement