Pagini recente » Cod sursa (job #1293592) | Cod sursa (job #271753) | Profil PavelRazvan | Monitorul de evaluare | Cod sursa (job #1124619)
#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], e[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, ++e[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 ( e[i]%2==1 ) {
aux= aux+x*(x-1)/2;
} else {
aux= aux-x*(x-1)/2;
}
}
}
sol-= aux;
fout<<sol<<"\n";
return 0;
}