Pagini recente » Cod sursa (job #1473332) | Cod sursa (job #1391591) | Cod sursa (job #2000351) | Cod sursa (job #488080) | Cod sursa (job #365640)
Cod sursa(job #365640)
#include<stdio.h>
long long n,max;
long long v[100002];
int f[1<<20],nr[1<<20],d[1<<20];
inline long long calc(long long x)
{
return x*(x-1)/2;
}
void rez()
{
long long i,j,k,sol=0;
for(i=2;i<=max;i++)
if(!d[i])
{
for(k=i*i;k<=max;k+=i*i)
d[k]=-1;
for(j=i;j<=max;j+=i)
d[j]=d[j]+(d[j]>=0);
}
for(i=2;i<=max;i++)
if(d[i]>=0)
sol=sol+(d[i]&1)?calc(nr[i]):(-1*calc(nr[i]));
printf("%lld\n",(calc(n)-sol)/2);
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
long long i,j;
for(i=1;i<=n;i++)
{
scanf("%lld",&v[i]);
f[v[i]]++;
if(v[i]>max)
max=v[i];
}
for(i=2;i<=max;i++)
for(j=i;j<=max;j+=i)
nr[i]+=f[j];
rez();
return 0;
}