Pagini recente » Cod sursa (job #348846) | Cod sursa (job #2297095) | Cod sursa (job #558056) | Cod sursa (job #2106489) | Cod sursa (job #397265)
Cod sursa(job #397265)
#include<math.h>
#include<fstream.h>
int x[1000100],k[1000100],w[200100],v[1000100];
int main()
{
int max=0,n,i,j,nn,a,b,d,c,gasit,ok,nr;
long long r=0;
ifstream f("pairs.in");
ofstream g("pairs.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>a;
if(a>max)
max=a;
k[a]=1;
}
for(i=2;i<=max;i++)
for(j=1;j<=max/i;j++)
if(k[i*j])
x[i]++;
nn=sqrt(max);
w[++w[0]]=2;
d=3;
while(d<=max)
{
w[++w[0]]=d;
if(d<=nn)
{
a=d*d;
b=(d<<1);
while(a<=max)
{
c=(a>>1);
if(!v[c])
v[c]=1;
a+=b;
}
}
gasit=0;
c=(d>>1)+1;
while(!gasit)
{
if(!v[c])
{
d=(c<<1)+1;
gasit=1;
}
else c++;
}
}
for(i=2;i<=max;i++)
{
nr=0;
ok=1;
a=i;
for(j=1;w[j]*w[j]<=a&&ok;j++)
{
if(a%w[j]==0)
{
nr++;
a/=w[j];
}
if(a%w[j]==0)
ok=0;
}
if(ok)
{
if(a>1)
nr++;
if(nr%2)
r+=1ll*x[i]*(x[i]-1)/2;
else
r-=1ll*x[i]*(x[i]-1)/2;
}
}
g<<1ll*n*(n-1)/2-r;
return 0;
}