Pagini recente » Cod sursa (job #643888) | Cod sursa (job #2580430) | Cod sursa (job #2556462) | Cod sursa (job #2771927) | Cod sursa (job #119670)
Cod sursa(job #119670)
#include <cstdio>
#include <math.h>
#define Nmax 1000024
bool a[Nmax], g[Nmax];
int x[Nmax];
int main()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
int n,w,max=0,k;
scanf("%d", &n);
for (int i=1;i<=n;++i)
{
scanf("%d", &w);
a[w]=1;
if(w>max) max = w;
}
long long ret,W;
ret = n-1;
ret *= n;
ret /= 2;
for (int i=2;i<=max;++i) if (g[i] == 0)
{
w = i; k = 0;
for (int j=2;j<=sqrt(w);++j)
if (w%j==0)
{
++k;
w/=j;
if (w%j==0) k = -1;
if (k<0) break;
}
if (w > 1) ++k;
if (k>0)
{
for (int j=1;i*j<=max;++j)
if (a[i*j]) ++x[i];
if (x[i] > 1)
{
W = x[i]-1;
W *= x[i];
W /= 2;
if (k&1) ret -= W; else ret += W;
}
}
else
{
for (int j=2;i*j<=max;++j)
g[i*j] = 1;
}
}
printf("%lld\n", ret);
return 0;
}