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