Pagini recente » Cod sursa (job #1220511) | Cod sursa (job #2959407) | Cod sursa (job #1937834) | Cod sursa (job #911972) | Cod sursa (job #1370572)
#include <bits/stdc++.h>
using namespace std;
const int Vmax = 1000000 + 1;
int sieve[Vmax];
int use[Vmax];
bool prime[Vmax];
bool valid[Vmax];
int N, M;
int main()
{
ifstream in("pairs.in");
ofstream out("pairs.out");
ios_base::sync_with_stdio(false);
in >> N;
for ( int i = 1; i <= N; ++i )
{
int a;
in >> a;
use[a] = 1;
M = max(M, a);
}
for ( int i = 2; i <= M; ++i )
valid[i] = true;
for ( int i = 2; i <= M; ++i )
{
for ( int j = i + i; j <= M; j += i )
if ( use[j] )
use[i]++;
if ( prime[i] == false )
{
sieve[i] = 1;
for ( int j = i + i; j <= M; j += i )
{
prime[j] = true;
if ( valid[j] )
{
if ( (j / i) % i == 0 )
valid[j] = false;
sieve[j]++;
}
}
}
}
long long sol = 1LL * N * (N - 1) / 2;
for ( int i = 2; i <= M; ++i )
if ( valid[i] )
{
if ( sieve[i] & 1 )
sol -= 1LL * use[i] * (use[i] - 1) / 2;
else
sol += 1LL * use[i] * (use[i] - 1) / 2;
}
out << sol << "\n";
return 0;
}