Pagini recente » Cod sursa (job #580200) | Cod sursa (job #2527972) | Cod sursa (job #2742911) | Cod sursa (job #1000501) | Cod sursa (job #1774422)
#include<bits/stdc++.h>
#define MaxVal 1000005
using namespace std;
int n,maxim,x,seen[MaxVal],prime[MaxVal>>1],dp,j,nr,e,l,X[MaxVal],Y[MaxVal],k;
long long sol,perechi;
bool ciur[MaxVal];
bool ok;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
seen[x]=1;
maxim=max(maxim,x);
}
for(int i=2;(i*i)<=maxim;i++)
{
if(!ciur[i])
{
for(int j=(i<<1);j<=maxim;j+=i)
{
ciur[j]=i;
}
}
}
for(int i=2;i<=maxim;i++)
{
if(!ciur[i])
{
prime[++dp]=i;
}
}
for(int i=2;i<=maxim;i++)
{
x=i;
j=1;
ok=1;
nr=0;
while(j<=dp && x>1 && ok)
{
e=0;
if(!(x%prime[j])) nr++;
while(!(x%prime[j]))
{
e++;
x/=prime[j];
}
if(e>1)
{
ok=0;
}
j++;
}
if(ok)
{
l++;
X[l]=i;
Y[l]=nr;
}
}
long long sol=0;
for(int i=1;i<=l;i++)
{
k=X[i];
nr=0;
for(int j=k;j<=maxim;j+=k)
{
nr=nr+seen[j];
}
long long perechi=(nr*(nr-1))>>1;
if(Y[i]%2) sol=sol+perechi;
else sol-=perechi;
}
sol=((n*(n-1))>>1)-sol;
printf("%lld\n",sol);
return 0;
}