Pagini recente » Istoria paginii utilizator/cristinacismaru | Cod sursa (job #1927422) | Cod sursa (job #1327866) | Cod sursa (job #3179432) | Cod sursa (job #2915067)
#include <fstream>
using namespace std;
using ll = long long;
ifstream fin( "pairs.in" );
ofstream fout( "pairs.out" );
const int MAXV = 1e6;
bool ciur[1 + MAXV], f[1 + MAXV], in[1 + MAXV];
int cnt[1 + MAXV];
int getNum() {
int n = 0;
char ch;
while ( isspace( ch = fin.get() ) );
do {
n = n * 10 + ch - '0';
} while ( isdigit( ch = fin.get() ) );
return n;
}
int main() {
int n, x, mx = 0;
n = getNum();
for ( int i = 1; i <= n; ++i ) {
x = getNum();
mx = max(mx, x);
in[x] = true;
}
for ( int d = 2; d <= mx; ++d ) {
if ( ciur[d] == 0 ) {
cnt[d] = 1;
for ( int i = d + d; i <= mx; i += d ) {
ciur[i] = 1;
++cnt[i];
if ( i % (d * d) == 0 ) {
f[i] = true;
}
}
}
}
ll res = 0;
for ( int d = 2; d <= mx; ++d ) {
if ( !f[d] ) {
int k = 0;
for ( int i = d; i <= mx; i += d ) {
k += in[i];
}
if ( cnt[d] % 2 ) {
res += (ll)k * (k - 1) / 2;
} else {
res -= (ll)k * (k - 1) / 2;
}
}
}
fout << (ll)n * (n - 1) / 2 - res;
fin.close();
fout.close();
return 0;
}