Pagini recente » Cod sursa (job #1448405) | Cod sursa (job #2405973) | Cod sursa (job #2048003) | Cod sursa (job #2588401) | Cod sursa (job #150883)
Cod sursa(job #150883)
# include <stdio.h>
# define input "pairs.in"
# define output "pairs.out"
# define MAX 1000001
bool a[MAX],u[MAX];
int n,i,j,x,m,k,aux,nr;
int b[MAX],prim[MAX];
long long res,ret;
int main()
{
freopen(input, "r", stdin);
freopen(output, "w", stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&x);
a[x] = 1;
if( x > m )
m = x;
}
ret = (long long)(n*(n-1)/2);
for(i=2;i<=m;i++)
{
for(j=1;j*i<=m;j++)
b[i] += a[j*i];
}
prim[1] = 2;
nr = 1;
for(i=3;i<=m;i+=2)
if(!u[i])
{
prim[++nr] = i;
for(j=i+i;j<=m;j+=i)
u[j] = true;
}
for(k=2;k<=m;k++)
{
if(b[k] >= 2)
{
aux = k;
n = 1;
bool ok = true;
for(j=1;prim[j]*prim[j] <= aux;j++)
{
if(aux%prim[j] == 0)
{
n++;
aux/=prim[j];
}
if(aux%prim[j] == 0)
{ ok = false;
break; }
}
if(ok)
{
if(n%2)
res += (long long)b[k]*(b[k]-1)/2;
else
res -= (long long)b[k]*(b[k]-1)/2;
}
}
}
printf("%lld",ret-res);
return 0;
}