Pagini recente » Cod sursa (job #3154588) | Cod sursa (job #1843671) | Cod sursa (job #1983207) | Cod sursa (job #2643157) | Cod sursa (job #1394057)
#include <cstdio>
#define NRMAX 1000005
#define NMAX 100005
using namespace std;
int n,k,Max;
int nr[NMAX],uz[NRMAX],v[NMAX];
bool viz[NRMAX],fol[NRMAX];
void ciur()
{
for(int i = 2; i <= Max; ++i)
{
if (viz[i] == 0)
{
for(int j = i; j <= Max; j += i)
{
++nr[j];
viz[j]=1;
if(j % (i*i) == 0) fol[j]=1;
}
}
}
}
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d",&n);
Max = 0;
for(int i = 1; i <= n; ++i)
{
scanf("%d",&v[i]);
uz[v[i]]=1;
if (v[i] > Max) Max = v[i];
}
ciur();
long long sol = 0;
for(int i = 2; i <= Max; ++i)
{
if(fol[i] == 0)
{
k = 0;
for(int j = i; j <= Max; j += i)
k += uz[j];
if(nr[i] & 1)
{
sol += ((1ll * k * (k-1)) / (2 * 1ll));
}
else
{
sol -= ((1ll * k * (k-1)) / (2 * 1ll));
}
}
}
long long rez = ((1ll * n * (n-1)) / (2 * 1ll)) - sol;
printf("%lld\n",rez);
return 0;
}