func_code_string: #include <bits/stdc++.h>   using namespace std;   long long a[500005], b[500005], dp[500005], t;   vector<long long> c;   void poisk_del(long long z) {     for (int del = 2; del * del <= z; del++) {       if (z % del == 0) c.push_back(del);       while (z % del == 0) {         z /= del;       }     }     if (z != 1) c.push_back(z);   }   void add(int s) {     for (long long mask = 1; mask < (1 << s); mask++) {       long long proz = 1;       int kol = 0;       for (int j = 0; j < s; j++) {         if ((mask & (1 << j)) > 0) {           proz *= c[j];           kol++;         }       }       if (kol % 2 == 1) {         t += dp[proz];         dp[proz]++;       } else {         t -= dp[proz];         dp[proz]++;       }     }   }   void delet(int s) {     for (long long mask = 1; mask < (1 << s); mask++) {       long long proz = 1;       int kol = 0;       for (int j = 0; j < s; j++) {         if ((mask & (1 << j)) > 0) {           proz *= c[j];           kol++;         }       }       if (kol % 2 == 1) {         dp[proz]--;         t -= dp[proz];       } else {         dp[proz]--;         t += dp[proz];       }     }   }   int main() {     long long n, q;     cin >> n >> q;     for (int i = 0; i < n; i++) {       cin >> a[i];     }     n = 0;     for (int i = 0; i < q; i++) {       int x;       cin >> x;       x--;       c.clear();       if (b[x] == 0) {         n++;         b[x] = 1;         poisk_del(a[x]);         int s = c.size();         long long ans = (n * (n + 1) / 2) - n;         add(s);         cout << ans - t << endl;       } else {         n--;         b[x] = 0;         poisk_del(a[x]);         int s = c.size();         long long ans = (n * (n + 1) / 2) - n;         delet(s);         cout << ans - t << endl;       }     }   }   