Pagini recente » Cod sursa (job #507889) | Cod sursa (job #635159) | Cod sursa (job #2923762) | Cod sursa (job #2418230) | Cod sursa (job #213450)
Cod sursa(job #213450)
#include <stdio.h>
#include <vector>
#define N 1000100
using namespace std;
vector <bool> m(N);
int n, nr[N], v, maxim;
long long sol;
inline long long combinari(long long x) { return x*(x-1)/2; }
void read()
{
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf("%d", &n);
int t;
for (int i = 1; i <= n; ++ i)
{
scanf("%d", &t);
m[t] =1;
if(maxim<t) maxim=t;
}
sol=combinari(n);
}
void solve()
{
long long i,j;
for ( i = 2; i <= maxim; ++i)
{
v=0;
if (nr[i] == -1)
continue;
if (nr[i] == 0)
for (j = i; j <= maxim; j+=i)
if(nr[j] != -1)
++nr[j];
for (j = i; j <= maxim; j+=i)
if(m[j])
++v;
if(i>1000)
continue;
long long k = i*i;
for (j = k; j <= maxim; j+=k)
nr[j] = -1;
if (nr[i]%2 == 0)
sol+=combinari(v);
else
sol-=combinari(v);
}
}
void print(){ printf("%lld\n", sol); }
int main()
{
read();
solve();
print();
return 0;
}