Pagini recente » Cod sursa (job #2258757) | Cod sursa (job #1597863) | Cod sursa (job #1149092) | Cod sursa (job #1914824) | Cod sursa (job #214832)
Cod sursa(job #214832)
#include<stdio.h>
struct dub{
int i,j;
};
dub p[1000000];
long long n,i,x,j,c,k,max=-1;
int v[1000000],t;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%lld",&n);
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(max<x)
max=x;
v[x]=1;
}
if(n%2==0)
c=n/2*(n-1);
else
c=(n-1)/2*n;
p[2].j=1;
for(i=2;i<=max;i++)
if(p[i].i==0)
{
p[i].j=1;
for(j=2*i;j<=max;j+=i)
p[j].i=1;
}
for(i=2;i<=max;i++)
if(p[i].i==0)
for(j=2*i;j<=max;j+=i)
{
if(p[j/i].j < 0)
p[j].j=-2000000000;
else
p[j].j=p[j/i].j+1;
if(j==i*i)
p[j].j=-2000000000;
}
for(i=2;i<=max;i++)
{
if(p[i].j > 0)
{
for(j=i;j<=max;j+=i)
if(v[j]==1)
t++;
if(p[i].j%2==0)
c=c+t*(t-1)/2;
else
c=c-t*(t-1)/2;
t=0;
}
}
printf("%lld",c);
return 0;
}