Cod sursa(job #1458967)

Utilizator radudurlesteanuDurlesteanu Radu Stefan radudurlesteanu Data 8 iulie 2015 21:20:03
Problema Pairs Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
using namespace std;
int p[1000001],b[1000001],d[1000001];
int num[100001],apar[1000001];
int n,cap,i,j,nr;
long long sum;
int main()
{
freopen ("pairs.in","r",stdin);
freopen ("pairs.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
    {
    scanf("%d",&num[i]);
    apar[num[i]]=1;
    if (cap<num[i]) cap=num[i];
    }
for (i=2;i<=cap;i++)
    {
    if (p[i]==0)
        {
        d[i]=1;
        for (int j=2;i*j<=cap;j++)
            {
            if (j%i==0) b[i*j]=1;
            p[i*j]=1;
            d[i*j]++;
            }
        }
    }
    for (i=2;i<=cap;i++)
    {
        if (b[i]==0)
        {
        nr=0;
            for (j=i;j<=cap;j+=i) if(apar[j]==1) nr++;
            if (d[i]%2==1) sum+=(long long)nr*(nr-1)/2;
                      else sum-=(long long)nr*(nr-1)/2;
        }
    }
sum=(long long)n*(n-1)/2-sum;
printf("%lld\n",sum);
}