Pagini recente » Cod sursa (job #2091728) | Cod sursa (job #1598487) | Cod sursa (job #170460) | Cod sursa (job #2742857) | Cod sursa (job #2136271)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
const int M_MAX = 1000000;
int n;
long long ans;
bool frecv[M_MAX + 2];
int mult[M_MAX + 2];
int primeDivs[M_MAX + 2];
void ciur()
{
for(int i = 2; i <= M_MAX; i ++)
if(!primeDivs[i])
{
primeDivs[i] = 1;
for(int j = 2 * i; j <= M_MAX; j += i)
primeDivs[j]++;
}
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
{
int x;
in >> x;
frecv[x] = true;
}
ciur();
for(int i = 2; i <= M_MAX; i++)
for(int j = i; j <= M_MAX; j += i)
mult[i] += frecv[j];
ans = n * (n - 1) / 2;
for(int i = 2; i <= M_MAX; i++)
{
long long semn;
semn = (primeDivs[i] % 2 ? -1 : 1);
ans += semn * mult[i] * (mult[i] - 1) / 2;
}
out << ans << '\n';
return 0;
}