Pagini recente » Cod sursa (job #2784609) | Cod sursa (job #2930271) | Cod sursa (job #1109334) | Cod sursa (job #590061) | Cod sursa (job #2983575)
#include <fstream>
#include <bitset>
using namespace std;
ifstream cin( "pairs.in" );
ofstream cout( "pairs.out" );
const int MAX = 1e6 + 2;
unsigned char noDiv[ MAX ];
bitset<MAX> ciur;
bitset<MAX> mb;
int n, xMax;
int main()
{
cin >> n;
for( int i = 1, x; i <= n; i++ ) {
cin >> x;
mb[ x ] = 1,
xMax = max( xMax, x );
}
long long rez = (long long)n * ( n - 1 ) / 2;
for( int i = 2; i <= xMax; i++ ) {
if( noDiv[ i ] == 0 )
for( int j = i; j <= xMax; j += i )
noDiv[ j ]++;
if( ciur[ i ] == 0 ) {
long long ii = (long long)i * i;
for( long long jj = ii; jj <= xMax; jj += ii )
ciur[ jj ] = 1;
long long R = 0;
for( int j = i; j <= xMax; j += i )
if( mb[ j ] == 1 )
R++;
R = R * ( R - 1 ) / 2;
( !( noDiv[ i ] & 1 ) ) ? rez += R : rez -= R;
}
}
cout << rez << '\n';
return 0;
}