Pagini recente » Cod sursa (job #1876444) | Cod sursa (job #854269) | Cod sursa (job #2064534) | Cod sursa (job #706419) | Cod sursa (job #539253)
Cod sursa(job #539253)
#include<stdio.h>
#include<string.h>
long n,i,a,f[1000050],x[1000050],j,max;
long long s,aa;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i)
{
scanf("%ld",&a);
if(a>max)
max=a;
f[a]=1;
//printf("%ld " ,f[i]);
}
/*for(i=1;i<=max;i++)
printf("%ld " ,f[i]);*/
//printf("\n");
for(i=2;i<=max;++i)
for(j=i;j<=max;j+=i)
x[i]+=f[j];
memset(f,0,sizeof(f));
long long ii,jj;
for(ii=2;ii<=max;++ii)
if(f[ii]==0)
{
for(jj=ii;jj<=max;jj+=ii)
{
if(f[jj]>-1)
f[jj]++;
}
/* for(i=1;i<=max;i++)
printf("%lld ",f[i]);
printf("\n");*/
for(jj=ii*ii;jj<=max;jj+=ii*ii)
f[jj]=-1;
/* for(i=1;i<=max;i++)
printf("%lld ",f[i]);
printf("\n");
printf("\n");*/
}
/*for(i=1;i<=max;i++)
printf("%lld ",f[i]);
printf("\n");
for(i=1;i<=max;i++)
printf("%lld ",x[i]);
printf("\n");
printf("\n");*/
for(i=2;i<=max;++i)
if(f[i]>0)
{
if(f[i]%2)
{
s+=((long long)x[i]*(x[i]-1)/2);
// printf("%lld ", s);
}//
else {
s-=((long long)x[i]*(x[i]-1)/2);
// printf("%lld ",s);
}
}
aa=(long long)n*(n-1)/2-s;
printf("%lld\n",aa);
return 0;
}