Pagini recente » Cod sursa (job #1124448) | Cod sursa (job #2037331) | Cod sursa (job #1749238) | Cod sursa (job #2072979) | Cod sursa (job #113883)
Cod sursa(job #113883)
#include<fstream.h>
#include<math.h>
#define dim 1000001
int v[dim],x[dim],prim[dim];
int main()
{ifstream f("pairs.in");
ofstream g("pairs.out");
unsigned long n,i,j,cont,rez,xx,max=0,jum;
f>>n;
for(i=1;i<=n;i++)
{f>>xx;
v[xx]=1;
if(xx>max) max=xx;
}
int ok=1;
prim[2]=prim[3]=1;
for(i=5;i<=max;i=i+2)
{ok=1;
jum=sqrt(i);
for(j=3;j<=jum;j=j+2) if(i%j==0) {ok=0;break;}
prim[i]=ok;
}
for(i=1;i<=max;i++)
{jum=max/i;
for(j=1;j<=jum;j++)
if(v[i*j]) x[i]++;
}
prim[1]=1;
//rez=0;
rez=x[1]*(x[1]-1)/2;
for(i=2;i<=max;i++)
{if(prim[i]) rez-=x[i]*(x[i]-1)/2;
else
{cont=1;
jum=i/2;//sqrt(i);
if(i%2==0) cont++;
for(j=3;j<=jum;j=j+2)
{if(i%j==0)
{if(prim[j]) cont++;}
}
if(cont%2==0) rez-=x[i]*(x[i]-1)/2;
else rez+=x[i]*(x[i]-1)/2;
}
}
f.close();
g<<rez<<'\n';
g.close();
return 0;
}