Pagini recente » Cod sursa (job #510475) | Cod sursa (job #572441) | Cod sursa (job #3176128) | Cod sursa (job #2189181) | Cod sursa (job #918018)
Cod sursa(job #918018)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("pairs.in");
ofstream out ("pairs.out");
const int N = 1000001 ;
typedef long long I64;
bool X[N];
int A[N],V[N],n;
I64 SOL,M;
void READ ()
{
in>>n;
for( I64 x,i=1 ; i <= n ; ++i )
{
in>>x;
X[x]=1;
M=max(M,x);
}
}
void SOLVE ()
{
for( I64 i=2 ; i <= M ; ++i )
for( I64 j=i ; j <= M ; j+=i )
A[i]+=X[j];
for( I64 i=2 ; i <= M ; ++i )
if( !V[i] )
{
for( I64 j=i*i ; j <= M ; j+=i*i )
V[j]=-1;
for( I64 j=i ; j <= M ; j+=i )
if( V[j] >= 0 )
++V[j];
}
SOL=1LL*n*(n-1);
SOL>>=1;
for( I64 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;
}