Cod sursa(job #2102327)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 8 ianuarie 2018 17:48:28
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
long long n,i,j,maxim;
int v[1000001],x[100001],f[100001];
int main()
{
    in>>n;
    for (i=1; i<=n; i++)
    {
        in>>v[i];
        if (v[i]>maxim)
        {
            maxim=v[i];
        }
        f[v[i]]=1;
    }
    long long res = 0;
    for (i=2; i<maxim; i++)
    {
        if (x[i]==0)
        {
            for (j=i; j<=maxim; j+=i)
            {
                x[j]++;
            }
        }
    }
    for (i=2; i*i<=maxim; i++)
    {
        for (j=i*i; j<=maxim; j+=i*i)
        {
            x[j]=-1;
        }
    }
    long long t=0,nr=0;
    for (i=2; i<=maxim; i++)
    {
        if (x[i] == -1)
            continue;
        nr = 0;
        for (j=i; j<=maxim; j+=i)
        {
            if (f[j] == 1)
                nr++;
        }
        t=nr*(nr-1)/2;
        if (x[i]%2==0)
            res-=t;
        else
            res+=t;
    }
    t=n*(n-1)/2;
    out<<t-res;
    return 0;
}