Cod sursa(job #1542630)

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

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

int a[XMAX], nrprimi[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++)
        if (nrprimi[i]==0)
        for(int j=i;j<=MAX;j+=i) nrprimi[j]++;
    for(int i=2;i*i<=MAX;i++)
        for(int j=i*i;j<=MAX;j+=i*i)
        nrprimi[j] = 0;

    long long ans = 0;
    for (int i=2;i<=MAX;i++)
        if (nrprimi[i])
        {
            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;
}