Pagini recente » Cod sursa (job #2751454) | Cod sursa (job #913629) | Cod sursa (job #129953) | Cod sursa (job #262942) | Cod sursa (job #213548)
Cod sursa(job #213548)
#include<stdio.h>
#include<vector>
using namespace std;
#define N 100005
int n;
long long rez;
//bool mult[N];
vector<bool> mult(N);
int nrd[N];
void citire()
{
int x;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
scanf("%d",&x);
mult[x]=1;
}
rez=(long long)((n*(n-1))>>1);
}
inline long long comb(int x)
{
return (long long)(((x-1)*x)>>1);
}
void numara()
{
int i,a,j1;
long long i2,j;
for(i=2; i<N; i++)
{
if(nrd[i]!=-1)
{
if(nrd[i]==0)
{
i2=(long long)i*(long long)i;
for(j=i2; j<N; j+=i2)
nrd[j]=-1;
for(j=i; j<N; j+=i)
if(nrd[j]!=-1)
nrd[j]++;
}
a=0;
for(j1=i; j1<N; j1+=i)
if(mult[j1])
a++;
if(a>1)
{
if(nrd[i]&1)
rez-=comb(a);
else
rez+=comb(a);
}
}
}
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
citire();
numara();
printf("%lld\n",rez);
return 0;
}