AhmedAshraff

Untitled

Jun 17th, 2025
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.80 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. typedef long long ll;
  5. #define sz(s) (int)(s).size()
  6. #define all(s) s.begin(), s.end()
  7.  
  8. void Speed(){
  9.     ios_base::sync_with_stdio(false);
  10.     cin.tie(NULL);
  11. }
  12. const int N = (1<<20) + 1;
  13. int mob[N];
  14. bool prime[N];
  15. vector<int> d[N];
  16. void moebius(){
  17.     fill(mob, mob + N, 1);
  18.     memset(prime + 2, 1, sizeof(prime) - 2);
  19.     mob[0] = 0;
  20.     mob[2] = -1;
  21.     for (int i = 4; i < N; i += 2){
  22.         mob[i] *= (i & 3) ? -1 : 0;
  23.         prime[i] = 0;
  24.     }
  25.     for (int i = 3; i < N; i += 2){
  26.         if (prime[i]){
  27.             mob[i] = -1;
  28.             for (int j = 2 * i; j < N; j += i){
  29.                 mob[j] *= j % (1LL * i * i) ? -1 : 0;
  30.                 prime[j] = 0;
  31.             }
  32.         }
  33.     }
  34.  
  35.     for(int i = 2; i < N; i++){
  36.         if(mob[i] == 0) continue;
  37.         for(int j = i; j < N; j += i){
  38.             d[j].push_back(i);
  39.         }
  40.     }
  41. }
  42.  
  43. int freq[N];
  44.  
  45. void solve(){
  46.     int n; cin >> n;
  47.     vector<int> a(n);
  48.     for(auto& it : a) cin >> it;
  49.     ll ans = 0;
  50.     for(int i = 0; i < n; i++){
  51.         int cnt_non_zero = 0, cnt_zero = 0;
  52.         vector<int> upd;
  53.         for(int j = i + 1; j < n; j++){
  54.             int x = (a[i] ^ a[j]);
  55.             if(x == 0){
  56.                 cnt_zero++;
  57.                 continue;
  58.             }
  59.             for(int y : d[x]){
  60.                 ans -= 1ll * mob[y] * freq[y];
  61.                 freq[y]++;
  62.                 upd.push_back(y);
  63.             }
  64.             if(x > 1) cnt_non_zero++;
  65.         }
  66.         ans+=1LL*cnt_non_zero*cnt_zero;
  67.         for(int x : upd) freq[x] = 0;
  68.     }
  69.     cout << ans << '\n';
  70. }
  71.  
  72. int main(){
  73.     freopen("gcd.in", "r", stdin);
  74.     Speed();
  75.     moebius();
  76.     int tc = 1;
  77.     cin >> tc;
  78.     while (tc--){
  79.         solve();
  80.     }
  81.     return 0;
  82. }
Add Comment
Please, Sign In to add comment