Cod sursa(job #2376825)

Utilizator mirunazMiruna Zavelca mirunaz Data 8 martie 2019 17:58:05
Problema Pairs Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 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 = {1};
        
        while (x > 1) {
            int p = lo[x], e = 0;
            while (x % p == 0) {
                e += 1;
                x /= p;
            }
            int sz = divs.size();
            for (int i = 0; i < sz; ++i) {
                int now = divs[i];
                for (int j = 1; j <= e; ++j) {
                    now *= p;
                    divs.push_back(now);
                }
            }
        }
        
        for (auto x : divs)
            cnt[x] += 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;
}