Pagini recente » Diferente pentru planificare/sedinta-20081010 intre reviziile 26 si 27 | Blaturi | Statistici Alexandru Ariton (Andueboss) | Vanatoare | Cod sursa (job #957046)
Cod sursa(job #957046)
#include <stdio.h>
#define ll long long
bool v[1000001];
ll ciur[1000001];
int main()
{
ll m=0,n=0,i,j,x,t,sol=0;
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%lld\n",&n);
sol=n*(n-1)/2;
for (i=1;i<=n;++i)
{
scanf("%lld",&x);
v[x]=1;
if (x>m)
m=x;
}
for (i=2;i<=m;++i)
if (!ciur[i])
for (j=i;j<=m;j+=i)
++ciur[j];
for (i=2;i*i<=m;++i)
for (j=i*i;j<=m;j+=i*i)
ciur[j]=-1;
for (i=2;i<=m;++i)
if (ciur[i]!=-1)
{
t=0;
for (j=i,t=0;j<=m;j+=i)
if (v[j])
++t;
sol-=((ciur[i]%2)*2-1)*t*(t-1)/2;//formula
}
printf("%lld\n",sol);
return 0;
}