Cod sursa(job #1542622)

Utilizator rangerChihai Mihai ranger Data 5 decembrie 2015 15:18:43
Problema Pairs Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
# include <bits/stdc++.h>
using namespace std;

const int XMAX = 1000005;
const int NMAX = 100005;

int a[XMAX], viz[XMAX], nrprimi[XMAX], fprimi[XMAX];
int n, i, j;
int MAX;

int main()
{
    freopen("pairs.in","r",stdin);
    freopen("pairs.out","w",stdout);

    cin >> n;
    for (int i=1;i<=n;i++) {
        int x;
        cin>>x;
        a[x] = 1; MAX = max(MAX, x);
    }
    for(int i=2;i<=MAX;i++)
    {
        fprimi[i] = i;
    }

    for (int i=2;i<=MAX;i++)
    {
        if (viz[i]==0) {
            for (int j=i;j<=MAX;j+=i)
                nrprimi[j]++, fprimi[j] /= i, viz[j]=1;
        }
    }
    long long ans = 0;
    for (int i=2;i<=MAX;i++)
        if (fprimi[i]==1)
        {
            int xi = 0;
            for (int j=i;j<=MAX;j+=i) xi += a[j] == 1;
            ans += (nrprimi[i]&1 ? 1 : -1) * 1LL*xi*(xi-1)/2;
        }

    ans = 1LL*n*(n-1)/2 - ans;
    cout << ans;
    return 0;
}