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