Cod sursa(job #1289942)

Utilizator george_stelianChichirim George george_stelian Data 10 decembrie 2014 16:39:57
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int v[100010],v1[1000010];
char vaz[1000010],ciur[1000010],notok[1000010];

int main()
{
    freopen("pairs.in", "r", stdin);
    freopen("pairs.out", "w", stdout);
    int n,lim=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        vaz[v[i]]=1;
        lim=max(lim,v[i]);
    }
    for(int i=2;i<=lim;i++)
        if(!ciur[i])
        {
            for(int j=1;i*j<=lim;j++)
            {
                ciur[j*i]=1;
                v1[i*j]++;
                if(j%i==0) notok[i*j]=1;
            }
        }
    long long sol=0;
    for(int i=2;i<=lim;i++)
        if(!notok[i])
        {
            int nr=0;
            for(int j=i;j<=lim;j+=i) if(vaz[j]) nr++;
            if(v1[i]%2) sol+=1LL*nr*(nr-1)/2;
            else sol-=1LL*nr*(nr-1)/2;
        }
    printf("%lld",1LL*n*(n-1)/2-sol);
    return 0;
}