Cod sursa(job #2102328)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 8 ianuarie 2018 17:50:45
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>

using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
long long n,i,j,maxim;
int v[1000002];
int x[1000002];
int f[1000002];
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;
    for (i=2; i<=maxim; i++)
    {
        if (x[i] == -1)
            continue;
        long long 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;
}