Pagini recente » Cod sursa (job #1829907) | Cod sursa (job #1367158) | Cod sursa (job #2486172) | Cod sursa (job #2830733) | Cod sursa (job #2136306)
#include <bits/stdc++.h>
using namespace std;
ifstream in("pairs.in");
ofstream out("pairs.out");
const long long M_MAX = 1000000;
long long n;
long long ans, i, j;
bool frecv[M_MAX + 2];
long long 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)
{
long long mult = 0, semn;
for(j = i; j <= M_MAX; j += i)
mult += frecv[j];
semn = (primeDivs[i] % 2 ? -1 : 1);
ans += 1LL * semn * mult[i] * (mult[i] - 1) / 2;
}
out << ans << '\n';
return 0;
}