Pagini recente » Cod sursa (job #2358819) | Cod sursa (job #2106354) | Cod sursa (job #1772370) | Cod sursa (job #1890937) | Cod sursa (job #1124616)
#include <algorithm>
#include <fstream>
using namespace std;
ifstream fin("pairs.in");
ofstream fout("pairs.out");
typedef long long i64;
const int vmax= 1000000;
int prime[vmax+1], exp[vmax+1], p[vmax+1];
bool v[vmax+1];
int main( ) {
int n; fin>>n;
int sol= (i64)n*(n-1)/2, aux= 0, maxim= 0;
for ( int i= 1; i<=n; ++i ) {
int x; fin>>x;
v[x]= 1;
maxim= max(maxim, x);
}
for ( int i= 2; i<=maxim; ++i ) {
if ( !prime[i] ) {
for ( int j= i; j<=maxim; j+= i ) {
prime[j]= 1, ++exp[j];
if ( (j/i)%i==0 ) {
p[j]= 1;
}
}
}
}
for ( int i= 2; i<=maxim; ++i ) {
if ( !p[i] ) {
int x= 0;
for ( int j= i; j<=maxim; j+= i ) {
if ( v[j]==1 ) {
++x;
}
}
if ( exp[i]%2==1 ) {
aux= aux+x*(x-1)/2;
} else {
aux= aux-x*(x-1)/2;
}
}
}
sol-= aux;
fout<<sol<<"\n";
return 0;
}