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