Pagini recente » Cod sursa (job #2147538) | Cod sursa (job #965965) | Cod sursa (job #2907403) | Cod sursa (job #906790) | Cod sursa (job #918014)
Cod sursa(job #918014)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in ("pairs.in");
ofstream out ("pairs.out");
const int N = 1000001 ;
typedef unsigned long long I64;
bool X[N];
I64 SOL,n,A[N],V[N],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=n*(n-1);
SOL>>=1;
for( I64 i=2 ; i <= M ; ++i )
if( V[i] > 0 )
if( V[i]&1 )
SOL-=((A[i]*(A[i]-1))>>1);
else
SOL+=((A[i]*(A[i]-1))>>1);
}
void PRINT ()
{
out<<SOL;
}
int main ()
{
READ ();
SOLVE ();
PRINT ();
return 0;
}