Pagini recente » Cod sursa (job #1412190) | Cod sursa (job #1797999) | Cod sursa (job #1400054) | Rating qqq (ionut_milan_maldini) | Cod sursa (job #1508373)
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxN 100002
#define maxM 1000002
using namespace std;
int sol, n, i, j, m, v[maxN], a[maxM], x[maxM], cop[maxN];
int w[maxM];
void read()
{
freopen("pairs.in", "r", stdin);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
{
scanf("%d", &v[i]);
cop[i] = v[i];
a[v[i]] = i;
}
}
void sifter()
{
int l;
for (i = 2; i <= maxM; ++ i)
if (!w[i])
{
l = 0;
for (j = i; j <= maxM; j += i)
{
++ w[j];
l += (a[j] != 0);
if (a[j])
cop[a[j]] /= i;
}
x[i] = l;
}
else
{
l = 0;
for (j = i + i; j <= maxM; j += i)
l += (a[j] != 0);
x[i] = l;
}
}
int c(int x)
{
return (x * (x - 1)) / 2;
}
void solve()
{
sifter();
sol = c(n);
for (i = 1; i <= n; ++ i)
if (cop[i] == 1)
{
if (w[v[i]] % 2)
sol -= c(x[v[i]]);
else
sol += c(x[v[i]]);
}
}
void write()
{
freopen("pairs.out", "w", stdout);
printf("%d", sol);
}
int main()
{
read();
solve();
write();
return 0;
}