Pagini recente » Cod sursa (job #2659559) | Cod sursa (job #1585981) | Cod sursa (job #2257928) | Cod sursa (job #1319500) | Cod sursa (job #493696)
Cod sursa(job #493696)
#include <cstdio>
#define nmax 100010
#define lmax 2000005
int n;
int v[nmax], a[nmax], f[lmax], l, t, k, b[lmax], g[lmax];
char p[lmax];
long long sol;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
int i, j, x;
long long c;
for (i=1; i<=n; i++)
{
scanf("%d",&x);
if (x>l) l=x;
v[x]=1;
}
for (i=2; i<=l; i++) p[i]=1;
for (i=2; i<=l; i++)
if (p[i])
{
for (j=2*i; j<=l; j+=i)
p[j]=0;
}
for (i=2; i<=l; i++)
{
if (p[i])
a[++t]=i;
}
for (i=2; i<=l; i++) f[i]=0;
for (i=1; i<=t; i++)
for (j=a[i]; j<=l; j+=a[i])
if (!((j/a[i])%a[i])) f[j]=-1; else
if (f[j]!=-1) f[j]++;
for (i=2; i<=l; i++)
if (f[i]>-1)
{
b[++k]=i;
g[k]=f[i];
}
for (i=1; i<=k; i++)
{
c=0;
for (j=b[i]; j<=l; j+=b[i])
if (v[j]) c++;
if (g[i]%2) sol+=c*(c-1)/2; else
sol-=c*(c-1)/2;
}
sol=(long long) n*(n-1)/2-sol;
printf("%lld\n",sol);
}