Pagini recente » Borderou de evaluare (job #2421000) | Cod sursa (job #1116270) | Cod sursa (job #807335) | Cod sursa (job #1116284) | Cod sursa (job #1542622)
# include <bits/stdc++.h>
using namespace std;
const int XMAX = 1000005;
const int NMAX = 100005;
int a[XMAX], viz[XMAX], nrprimi[XMAX], fprimi[XMAX];
int n, i, j;
int MAX;
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
cin >> n;
for (int i=1;i<=n;i++) {
int x;
cin>>x;
a[x] = 1; MAX = max(MAX, x);
}
for(int i=2;i<=MAX;i++)
{
fprimi[i] = i;
}
for (int i=2;i<=MAX;i++)
{
if (viz[i]==0) {
for (int j=i;j<=MAX;j+=i)
nrprimi[j]++, fprimi[j] /= i, viz[j]=1;
}
}
long long ans = 0;
for (int i=2;i<=MAX;i++)
if (fprimi[i]==1)
{
int xi = 0;
for (int j=i;j<=MAX;j+=i) xi += a[j] == 1;
ans += (nrprimi[i]&1 ? 1 : -1) * 1LL*xi*(xi-1)/2;
}
ans = 1LL*n*(n-1)/2 - ans;
cout << ans;
return 0;
}