Cod sursa(job #2376843)

Utilizator mirunazMiruna Zavelca mirunaz Data 8 martie 2019 18:05:14
Problema Pairs Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
    ifstream cin("pairs.in");
    ofstream cout("pairs.out");
    
    int m = 1e6;
    
    vector<int> mu(m + 1, 1), lo(m + 1, 0), cnt(m + 1, 0);
    for (int d = 2; d <= m; ++d) {
        if (lo[d]) continue;
        for (int i = d; i <= m; i += d) {
            if (i % (1LL * d * d) == 0)
                mu[i] = 0;
            lo[i] = d;
            mu[i] *= -1;
        }
    }
    
    int n; cin >> n;
    for (int i = 0; i < n; ++i) {
        int x; cin >> x;
        vector<int> divs;
        
        while (x > 1) {
            int p = lo[x];
            divs.push_back(p);
            while (x % p == 0)
                x /= p;
        }
        
        for (int msk = 0; msk < (1 << divs.size()); ++msk) {
            int now = 1;
            for (int i = 0; i < (int)divs.size(); ++i) {
                if (msk & (1 << i))
                    now *= divs[i];
            }
            cnt[now] += 1;
        }
    }
    
    long long ans = 0;
    for (int d = 1; d <= m; ++d) {
        ans += 1LL * mu[d] * cnt[d] * (cnt[d] - 1) / 2;
    }
    cout << ans << endl;
    
    return 0;
}