Cod sursa(job #1259552)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 10 noiembrie 2014 10:28:24
Problema Pairs Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#define Mmax 1000000

using namespace std;

int n,x,Max,i,j;
int mod[Mmax+10],S[Mmax+10],ap[Mmax+10];
bool ok;
bool P[Mmax+10],pm[Mmax];
long long SOL;

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

    scanf("%d", &n);
    SOL=1LL*n*(n-1)/2;
    for (;n;--n)
    {
        scanf("%d", &x);
        ap[x]++;
        if (x>Max) Max=x;
    }

    for (i=2;i<=Max;++i)
    {
        ok=pm[i];
        if (!ok && i*i<=Max)
        {
            for (j=i*i;j<=Max;j+=i)
                pm[j]=true;
            for (j=i*i;j<=Max;j+=i*i)
                P[j]=true;
        }

        for (j=i;j<=Max && !ok;j+=i)
         mod[j]= (!mod[j]) ? (-1) : (mod[j]*(-1));
        for (j=i;j<=Max;j+=i)
            S[i]+=ap[j];
    }

    for (i=2;i<=Max;++i)
        if (!P[i]) SOL+=1LL*mod[i]*S[i]*(S[i]-1)/2;

    printf("%lld\n", SOL);


    return 0;
}