Cod sursa(job #1542613)

Utilizator rangerChihai Mihai ranger Data 5 decembrie 2015 15:11:41
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 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], x[NMAX];
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 j=i;j<=XMAX;j+=i)
            x[i] += a[j]==1;
    }

    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 && x[i]>1)
        ans += (nrprimi[i]&1 ? 1 : -1) * 1LL*x[i]*(x[i]-1)/2;
    ans = 1LL*n*(n-1)/2 - ans;
    cout << ans;
    return 0;
}