Pagini recente » Cod sursa (job #181928) | Cod sursa (job #1538855) | Cod sursa (job #2431868) | Cod sursa (job #2127527) | Cod sursa (job #1548180)
#include <stdio.h>
#include <algorithm>
#define nmax 100010
#define lmax 1000010
using namespace std;
int t[lmax],n,i,j,x,fr[lmax],maxx,b[lmax],nr[lmax],comb[nmax][3];
long long sol;
int main() {
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++) {
scanf("%d",&x); b[x]=1; maxx=max(maxx,x);
}
comb[0][0]=1;
for (i=1;i<=n;i++) {
comb[i][0]=1;
for (j=1;j<=2;j++) comb[i][j]=comb[i-1][j-1]+comb[i-1][j];
}
fr[1]=1;
for (i=2;i*i<=maxx;i++)
if (fr[i]==0) {
for (j=i*i;j<=maxx;j+=i) fr[j]=1;
}
for (i=2;i<=maxx;i++)
if (fr[i]==0) {
for (j=i;j<=maxx;j+=i) nr[j]++;
}
for (i=2;i<=maxx;i++)
if (nr[i]>0) {
int l=0;
for (j=i;j<=maxx;j+=i) l+=fr[j];
if (nr[i]%2==1) sol=sol+comb[l][2]; else
sol=sol-comb[l][2];
}
sol=(1LL*n*(n-1))/2-sol;
printf("%d",sol);
return 0;
}