Pagini recente » Cod sursa (job #1901478) | Cod sursa (job #2776638) | Cod sursa (job #947750) | Cod sursa (job #1445197) | Cod sursa (job #347190)
Cod sursa(job #347190)
#include<fstream>
#include<bitset>
using namespace std;
const char iname[]="pairs.in";
const char oname[]="pairs.out";
const int maxv=1000005;
ifstream f(iname);
ofstream g(oname);
bitset<maxv> a;
int n,k,x,X[maxv],divz[maxv];
long long max(long long a,int b)
{
if(a>b)
return a;
return b;
}
long long i,j,t,maxt;
int main()
{
f>>n;
for(i=1;i<=n;++i)
f>>x,a[x]=1,maxt=max(maxt,x);
for(i=2;i<=maxt;++i)
for(j=i;j<=maxt;j+=i)
X[i]+=a[j];
for(i=2;i<=maxt;++i)
if(divz[i]==0){
divz[i]=1;
for(j=i*i;j<=maxt;j+=i*i)
divz[j]=-1;
for(j=i+i;j<=maxt;j+=i)
if(divz[j]>=0)
++divz[j];
}
for(i=2;i<=maxt;++i)
if(divz[i]>0)
if(divz[i]&1)
t+=X[i]*(X[i]-1)/2;
else
t-=X[i]*(X[i]-1)/2;
t=n*(n-1)/2-t;
g<<t<<"\n";
f.close();
g.close();
return 0;
}