Pagini recente » Cod sursa (job #6341) | Cod sursa (job #76990) | Cod sursa (job #510703) | Cod sursa (job #2773772) | Cod sursa (job #918008)
Cod sursa(job #918008)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("pairs.in");
ofstream out ("pairs.out");
const int N = 1000001 ;
bool X[N];
int n,M,A[N],V[N];
long long SOL;
void READ ()
{
in>>n;
for( int x,i=1 ; i <= n ; ++i )
{
in>>x;
X[x]=1;
M=max(M,x);
}
}
void SOLVE ()
{
for( int i=2 ; i <= M ; ++i )
for( int j=i ; j <= M ; j+=i )
A[i]+=X[j];
for( int i=2 ; i <= M ; ++i )
if( !V[i] )
{
for( int j=i*i ; j <= M ; j+=i*i )
V[j]=-1;
for( int j=i ; j <= M ; j+=i )
if( V[j] >= 0 )
++V[j];
}
SOL=1LL*n*(n-1);
SOL>>=1;
for( int i=2 ; i <= M ; ++i )
if( V[i] > 0 )
if( V[i]&1 )
SOL-=((1LL*A[i]*(A[i]-1))>>1);
else
SOL+=((1LL*A[i]*(A[i]-1))>>1);
}
void PRINT ()
{
out<<SOL;
}
int main ()
{
READ ();
SOLVE ();
PRINT ();
return 0;
}