Pagini recente » Cod sursa (job #3031840) | Cod sursa (job #772237) | Cod sursa (job #2862290) | Cod sursa (job #382883) | Cod sursa (job #213534)
Cod sursa(job #213534)
#include <stdio.h>
#include <vector>
using namespace std;
const long N=2000010;
vector <bool> m(N,false);
long long maxim, n, nr[N], sol;
void read()
{
long long t, i;
freopen("pairs.in","r",stdin);
freopen("pairs.out","w",stdout);
scanf(" %lld", &n);
for (i=1; i<=n; i++)
{
scanf("%lld", &t);
if (maxim<t)
maxim=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, k, v=0;
sol=combinari(n);
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];
}//for j
k = (long long) (i*i);
for (j=i; j<=maxim; j+=i)
{
if (m[j])
v++;
}//for j
if ((2*k)<=1000000)
for (j=k; j<=maxim; j+=k)
nr[j]=-1;
else
if (k<=1000000)
nr[k]=-1;
if (nr[i]%2 == 0)
sol+=combinari(v);
else
sol-=combinari(v);
}//for i
}//solve
void print()
{
printf("%lld\n", sol);
}//print
int main()
{
read();
solve();
print();
return 0;
}//main