Pagini recente » Cod sursa (job #2655079) | Cod sursa (job #2216752) | Cod sursa (job #1763126) | Cod sursa (job #1389566) | Cod sursa (job #878629)
Cod sursa(job #878629)
#include<cstdio>
#include<bitset>
#define nmax 1000100
using namespace std;
long long v[nmax],n,sol,mx,nr;
bitset<nmax>M;
int main()
{
long long i,j,x;
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%lld ", &n);
sol=n*(n-1)/2;
for(;n;n--)
{
scanf("%lld ", &x);
M[x]=1;
if(x>mx)mx=x;
}
for(i=2;i<=mx;i++)
if(!v[i])
for(j=i;j<=mx;j+=i)
v[j]++;
for(i=2;i*i<=mx;i++)
for(j=i*i;j<=mx;j+=i*i)
v[j]=-1;
for(i=2;i<=mx;i++)
if(v[i]!=-1)
{
nr=0;
for(j=i;j<=mx;j+=i)
if(M[j])
nr++;
if(v[j]%2)sol+=(nr*(nr-1)/2);
else sol-=(nr*(nr-1)/2);
}
printf("%lld ", sol);
return 0;
}